Apache 服务器的内存问题

Apache 服务器的内存问题
Mem:   8176880k total,  8059736k used,   117144k free,    93040k buffers
Swap:  1004052k total,      108k used,  1003944k free,  7257056k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 4992 mysql     20   0  291m 115m 5380 S   65  1.4 739:54.71 mysqld             
20260 apache    20   0 43032  18m 3964 S   27  0.2   0:02.50 apache2            
20154 apache    20   0 41588  16m 3964 S   10  0.2   0:00.40 apache2
<snip>

这是吗:内存:总计 8176880k,已使用 8059736k;有什么可担心的!?

还有想法吗?

非常感谢

编辑:忘了说我对服务器一无所知,我已经遇到了这个......

回答:

> free -m
             total       used       free     shared    buffers     cached
Mem:          7985       7665        320          0         89       6942
-/+ buffers/cache:        633       7352
Swap:          980          0        980

看起来我并没有记忆问题

答案1

这很好 - 使用时 VIRT 值通常在这个数字附近prefork.c(我假设你正在使用):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10385 apache    15   0  376m  48m 3932 R 20.3  1.2   0:01.34 httpd
10423 apache    16   0  376m  46m 4576 S 15.0  1.2   0:01.09 httpd
10153 apache    15   0  337m  61m 4672 S 11.6  1.6   0:03.94 httpd
10419 apache    15   0  383m  54m 4696 S 11.6  1.4   0:01.00 httpd

您要监视的值是 RES - 这是子线程消耗的最大内存量的大小(在我的例子中,PHP 作为该线程的一部分运行,因此在加载库和数据时会出现“膨胀”)。线程不会释放分配的内存,但是当 apache 进程在其 maxrequests 之后按照以下方式终止线程时

<IfModule prefork.c>
MaxRequestsPerChild  1000

该线程将返回到其本机内存消耗。

要降低这些值,请确保您只加载所需的 apache 模块,并在运行非常大的 PHP 脚本时监视 apache 的线程(ini_set('memory_limit', '128M');然后递归地将数据加载到数组中 - 应该可以做到)。然后,在实际使用过程中,降低 MaxRequestsPerChild 值,直到您看到 apacheRES处于合理的水平。

以下是一些有用的参数调整文章:

答案2

没关系。可用内存是指系统、应用程序和缓存未使用的 RAM。您可以将“缓冲区”和“缓存”视为另一个可用 RAM。因此,您有大约 7 GB 的可用 RAM。使用以下命令:

free

您可以在以下行中看到“实际”可用 RAM:-/+ buffers/cache。您也可以使用 htop。

相关内容