切换服务器后 Apache 内存占用过高

切换服务器后 Apache 内存占用过高

最近搬到了一台装有 CentOS 5.4 的新服务器,它是 64 位的,而不是我们以前的 32 位。它现在有双处理器和更大的内存。

然而我意识到,Apache 已经严重消耗内存,有时会导致系统交换。

当前设置中,Nginx 1.0.8 位于最前面,用于提供静态内容;Apache 2.2 位于最前面,用于提供动态内容(PHP)。我还安装了 APC。是什么原因导致内存使用量激增?我尝试调整 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

知道为什么会发生这种情况吗?

编辑:更多流程信息

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

答案1

如果您发现内存使用量随着时间的推移而增加,则可能是某处发生了内存泄漏。您已经尝试过减少“MaxRequestsPerChild”参数 -尝试在受控环境中将其调低看看总内存是否停止增长。如果停止增长,则可能是 PHP 代码、PHP 解释器或 PHP 缓存模块泄漏了内存。

如果你发现内存泄漏,你可以尝试以下建议关于如何使用 Apache/PHP 调试内存泄漏的问题

相关内容