我想弄清楚为什么我的apache进程占用了这么多内存。
我的片规格(1.5GBRAM,CentOS 5,Apache2,PHP5.2,MySQL)
如您所见,我的顶级进程占用了我全部内存的将近一半,当产生更多的进程时,服务器几乎停止运行,经常进入交换和崩溃。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd 有人知道是什么原因导致apache (和php)消耗了这么多内存吗?
total used free shared buffers cached
Mem: 1545 827 718 0 3 111
-/+ buffers/cache: 713 832
Swap: 3071 103 2968发布于 2010-09-12 18:26:26
您几乎肯定是在运行mod_php,这意味着您几乎肯定在mpm_prefork中运行apache。
如果在加载导致您开始交换之前,性能通常是可以的,那么一个快速的解决方法就是开始降低apache的MaxClients。如果允许apache随时分叉工作进程,那么它将在负载下开始交换。请求将排队,直到工人可用,所以事情可能变得缓慢,但没有那么慢的死亡-通过交换。
如果您确实需要更严格地调优,请考虑避开Pre叉apache。这意味着以FastCGI的形式运行PHP。如果要在FastCGI下使用PHP5.3.3,应该考虑升级到PHP5.3.3,它有更好的FastCGI流程管理器(--启用-选项)。
php/worker比老式的mod_php内存效率高得多。然后,您可以对apache进程/线程的数量进行调整,而不依赖于PHP进程的数量。而且,内存过多的PHP进程只用于提供php驱动的内容,而不是浪费在处理静态文件上。
发布于 2010-09-10 06:40:18
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpdwordpress是apache上唯一运行的东西吗?我对PID 6765的cpu使用率很高很好奇。不知道它在做什么。就mem%s而言,对于webapp的设置来说,这是非常正常的,因为每个线程实际上运行的都是多个工作线程。
您正在为apache使用什么MPM,以及如何配置它?
此外,如果你张贴终端转储,请开始每一行四个空格。它允许保留格式。
发布于 2010-09-10 07:40:30
我的水晶球有点脏,但我想您正在使用memcached及其PHP扩展。如果是这样的话,试着禁用它,除非你真的需要它。
另一种可能是,您已经安装了一些操作代码缓存,比如XCache,并将其配置为使用了大量内存。
你可以试试
pmap -x `pidof apache`看看是什么在消耗记忆。
https://serverfault.com/questions/179785
复制相似问题