最近转移到新的服务器与CentOS 5.4和64位,而不是我们的旧的32位。 现在有了双处理器和更高的内存。
但是我意识到,apache一直在大量占用内存,有时会导致系统交换。
目前的设置在前面有Nginx 1.0.8来提供静态内容,Apache 2.2提供dynamic内容(PHP)。 我也安装了APC。 什么可能导致这种内存使用率高峰? 我尝试调整configuration文件的Apache,但它会工作,如果我把某些指令到一个荒谬的低数字。 在旧机器上之前,我可以使用默认设置,对于所有的apache进程,内存使用量不超过260MB:
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
但现在新机器正在使用这个高内存使用率,它可以得到高达600MB +:
<IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 20 MaxRequestsPerChild 500 </IfModule>
APC设置如下:
extension = apc.so apc.enabled=1 apc.shm_segments=1 apc.optimization=0 apc.shm_size=64M apc.ttl=0 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=/tmp/apc.XXXXXX apc.enable_cli=1 apc.cache_by_default=1
任何想法为什么发生这种情况?
编辑:一些更多的stream程信息
top - 21:18:45 up 10 days, 6:20, 4 users, load average: 0.00, 0.04, 0.06 Tasks: 103 total, 2 running, 101 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 98.8%id, 0.2%wa, 0.0%hi, 0.7%si, 0.0%st Mem: 1541280k total, 1479804k used, 61476k free, 99812k buffers Swap: 10482404k total, 25548k used, 10456856k free, 725180k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5613 jenkins 17 0 1144m 184m 13m S 0.7 12.3 2:05.94 java 25306 apache 15 0 541m 125m 69m S 0.0 8.3 0:10.44 httpd 25308 apache 15 0 533m 118m 67m S 0.0 7.9 0:11.01 httpd 25356 apache 16 0 524m 112m 69m S 0.0 7.5 0:08.84 httpd 25305 apache 15 0 510m 103m 69m S 0.0 6.9 0:11.58 httpd 25309 apache 16 0 498m 92m 69m S 0.0 6.1 0:10.35 httpd 25307 apache 15 0 499m 90m 67m S 0.0 6.0 0:09.59 httpd 9759 mysql 15 0 428m 83m 6920 S 0.0 5.6 11:10.01 mysqld 16121 apache 15 0 494m 68m 48m S 0.0 4.6 0:05.50 httpd 2945 user 15 0 659m 18m 6364 S 0.0 1.2 0:00.53 node 25303 root 15 0 425m 12m 6176 S 0.0 0.8 0:00.07 httpd 2944 user 15 0 636m 10m 2288 S 0.0 0.7 0:00.11 node [user@server~]# ps o rss,command -u apache RSS COMMAND 70236 /usr/sbin/httpd 105860 /usr/sbin/httpd 128096 /usr/sbin/httpd 92888 /usr/sbin/httpd 121288 /usr/sbin/httpd 94768 /usr/sbin/httpd 115644 /usr/sbin/httpd
如果看到内存使用量随着时间的推移而增加,那么可能是内存泄漏。 您已经尝试减less“MaxRequestsPerChild”参数 – 尝试在受控环境中进行更多调整,以查看总内存是否停止增长。 如果是这样,你可能会看到你的PHP代码,PHP解释器或PHPcaching模块泄漏内存。
如果你看到内存泄漏,你可以尝试一些关于如何使用Apache / PHPdebugging内存泄漏问题的build议。