一个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> 

是这样的:Mem:8176880k total,8059736k used; 什么都要担心!

和想法?

非常感谢

编辑:忘了说我对服务器一无所知,我已经降落在这个…

回答:

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

看起来不像我有一个内存问题毕竟

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

  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脚本( ini_set('memory_limit', '128M');然后recursion地将数据加载到数组中ini_set('memory_limit', '128M');监视apache的线程做到这一点)。 然后,在真实世界的使用情况下,降低MaxRequestsPerChild的值,直到你看到你的apache RES在合理的水平。

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

  • OnLamp LAMP堆栈调整
  • 低apache内存使用率
  • Apache最大的性能
  • 高服务器内存使用技巧

没关系。 可用内存意味着不被系统,应用程序和caching使用的RAM。 您可以将“缓冲区”和“caching”视为另一个可用的RAM。 所以你有大约7 GB的免费公羊。 用命令:

 free 

你可以在行中看到“真正的”可用RAM: – / + buffers / cache。 你也可以使用htop。