MPM Prefork Apache 使用大量内存

MPM Prefork Apache 使用大量内存

救命!我的 Apache 进程在启动时全部使用了 115MB 内存。

相关信息:

Linux 版本 (uname -a)

Linux 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux

Apache 版本(/usr/sbin/apache2 -v)

Server version: Apache/2.2.8 (Ubuntu)
Server built:   Mar  9 2010 20:45:36

顶部显示(top -u www-data)

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
23377 www-data  20   0  115m  94m 3908 S   28  1.6   0:04.59 apache2
23375 www-data  20   0  119m  99m 5892 S    9  1.6   0:05.04 apache2
23324 www-data  20   0  116m  96m 5144 S    2  1.6   0:04.73 apache2
23283 www-data  20   0  115m  95m 4480 S    1  1.6   0:04.89 apache2
23259 www-data  20   0  116m  96m 5380 S    0  1.6   0:05.55 apache2
23370 www-data  20   0  115m  94m 4396 S    0  1.6   0:04.75 apache2
23229 www-data  20   0  116m  96m 6096 S    0  1.6   0:05.43 apache2
... and so on ...

内存映射(pmap $(pidof apache2))(实际上只是一个 apache2 进程)

大部分记忆是[匿名],见第 5 行

23324:   /usr/sbin/apache2 -k start     
08048000    332K r-x--  /usr/sbin/apache2
0809b000      8K rw---  /usr/sbin/apache2
0809d000     12K rw---    [ anon ]       
093a0000  92812K rw---    [ anon ]      
b5b6c000      4K rw---    [ anon ]       
b5b6d000    512K rw-s-    [ shmid=0x13528003 ]
b5fa8000     16K r-x--  /lib/tls/i686/cmov/libnss_dns-2.7.so
b5fac000      8K rw---  /lib/tls/i686/cmov/libnss_dns-2.7.so
b5fae000    120K r-x--  /usr/lib/php5/20060613+lfs/suhosin.so
b5fcc000     16K rw---  /usr/lib/php5/20060613+lfs/suhosin.so
b5fd0000      4K rw---    [ anon ]                           
b5fd1000     76K r-x--  /usr/lib/php5/20060613+lfs/pdo.so    
b5fe4000      8K rw---  /usr/lib/php5/20060613+lfs/pdo.so    
b5fe6000     92K r-x--  /usr/lib/php5/20060613+lfs/mysqli.so 
b5ffd000      8K rw---  /usr/lib/php5/20060613+lfs/mysqli.so 
b5fff000   1648K r-x--  /usr/lib/libmysqlclient.so.15.0.0    
b619b000    268K rw---  /usr/lib/libmysqlclient.so.15.0.0    
b61de000      4K rw---    [ anon ]                           
b61f0000     92K r-x--  /usr/lib/libxcb.so.1.0.0             
b6207000      4K rw---  /usr/lib/libxcb.so.1.0.0             
b6208000    164K r-x--  /usr/lib/libfontconfig.so.1.3.0      
b6231000      4K rw---  /usr/lib/libfontconfig.so.1.3.0      
b6232000    124K r-x--  /usr/lib/libjpeg.so.62.0.0           
b6251000      4K rw---  /usr/lib/libjpeg.so.62.0.0           
b6252000    136K r-x--  /usr/lib/libpng12.so.0.15.0          
b6274000      4K rw---  /usr/lib/libpng12.so.0.15.0          
b6275000     60K r-x--  /usr/lib/libXpm.so.4.11.0            
b6284000      4K rw---  /usr/lib/libXpm.so.4.11.0            
b6285000    912K r-x--  /usr/lib/libX11.so.6.2.0             
b6369000     12K rw---  /usr/lib/libX11.so.6.2.0             
b636c000    424K r-x--  /usr/lib/libfreetype.so.6.3.16       
b63d6000     12K rw---  /usr/lib/libfreetype.so.6.3.16       
b63d9000    236K r-x--  /usr/lib/libt1.so.5.1.1              
b6414000     12K rw---  /usr/lib/libt1.so.5.1.1              
b6417000     84K rw---    [ anon ]                           
b642c000    116K r-x--  /usr/lib/libgd.so.2.0.0              
b6449000    128K rw---  /usr/lib/libgd.so.2.0.0              
b6469000     16K rw---    [ anon ]                           
b646d000     88K r-x--  /usr/lib/php5/20060613+lfs/gd.so     
b6483000     16K rw---  /usr/lib/php5/20060613+lfs/gd.so     
b6487000    192K r-x--  /usr/lib/libidn.so.11.5.30           
b64b7000      4K rw---  /usr/lib/libidn.so.11.5.30           
b64b8000    232K r-x--  /usr/lib/libcurl.so.4.0.1            
b64f2000      4K rw---  /usr/lib/libcurl.so.4.0.1            
b64f8000     44K r-x--  /usr/lib/php5/20060613+lfs/mysql.so  
b6503000      4K rw---  /usr/lib/php5/20060613+lfs/mysql.so  
b6504000    268K r-x--  /usr/lib/libgmp.so.3.4.2             
b6547000      4K rw---  /usr/lib/libgmp.so.3.4.2             
b6548000    648K r-x--  /usr/lib/libclamav.so.5.0.4          
b65ea000     44K rw---  /usr/lib/libclamav.so.5.0.4          
b65f8000     52K r-x--  /usr/lib/php5/20060613+lfs/curl.so   
b6605000      4K rw---  /usr/lib/php5/20060613+lfs/curl.so   
b6606000    148K r-x--  /usr/lib/libmcrypt.so.4.4.7          
b662b000      8K rw---  /usr/lib/libmcrypt.so.4.4.7          
b662d000     28K rw---    [ anon ]                           
b6634000     24K r-x--  /usr/lib/php5/20060613+lfs/pdo_mysql.so
b663a000      4K rw---  /usr/lib/php5/20060613+lfs/pdo_mysql.so
b663b000     16K r-x--  /usr/lib/libXdmcp.so.6.0.0             
b663f000      4K rw---  /usr/lib/libXdmcp.so.6.0.0             
b6640000     12K r-x--  /usr/lib/php5/20060613+lfs/clamav.so   
b6643000      4K rw---  /usr/lib/php5/20060613+lfs/clamav.so   
b6644000   1036K r-x--  /usr/lib/libc-client.so.2007.0         
b6747000     28K rw---  /usr/lib/libc-client.so.2007.0         
b674e000      4K rw---    [ anon ]                             
b6750000     24K r-x--  /usr/lib/libltdl.so.3.1.6              
b6756000      4K rw---  /usr/lib/libltdl.so.3.1.6              
b6757000     32K r-x--  /usr/lib/php5/20060613+lfs/mcrypt.so   
b675f000      4K rw---  /usr/lib/php5/20060613+lfs/mcrypt.so   
b6760000     88K r-x--  /usr/lib/php5/20060613+lfs/imap.so     
b6776000      4K rw---  /usr/lib/php5/20060613+lfs/imap.so     
b6777000    104K r-x--  /usr/local/lib/libssh2.so              
b6791000      4K rw---  /usr/local/lib/libssh2.so              
b6792000   1324K r-x--  /usr/lib/ZendOptimizer.so              
b68dd000     68K rw---  /usr/lib/ZendOptimizer.so              
b68ee000     20K rw---    [ anon ]                             
b68f3000      8K r-x--  /usr/lib/libXau.so.6.0.0               
b68f5000      4K rw---  /usr/lib/libXau.so.6.0.0               
b68f6000     52K r-x--  /usr/lib/php5/20060613+lfs/ssh2.so     
b6903000      4K rw---  /usr/lib/php5/20060613+lfs/ssh2.so     
b6904000    252K r----  /usr/lib/locale/en_US.utf8/LC_CTYPE    
b6974000     64K rw-s-  /dev/zero (deleted)                    
b6984000     36K r-x--  /lib/tls/i686/cmov/libnss_files-2.7.so 
b698d000      8K rw---  /lib/tls/i686/cmov/libnss_files-2.7.so 
b698f000     32K r-x--  /lib/tls/i686/cmov/libnss_nis-2.7.so   
b6997000      8K rw---  /lib/tls/i686/cmov/libnss_nis-2.7.so   
b6999000     28K r-x--  /lib/tls/i686/cmov/libnss_compat-2.7.so
b69a0000      8K rw---  /lib/tls/i686/cmov/libnss_compat-2.7.so
b69a2000     36K r-x--  /lib/libpam.so.0.81.6                  
b69ab000      4K rw---  /lib/libpam.so.0.81.6                  
b69ac000     28K r--s-  /usr/lib/gconv/gconv-modules.cache     
b69b3000      8K r-x--  /usr/lib/apache2/modules/mod_userdir.so
b69b5000      4K rw---  /usr/lib/apache2/modules/mod_userdir.so
b69b6000    148K r-x--  /usr/lib/apache2/modules/mod_ssl.so    
b69db000      8K rw---  /usr/lib/apache2/modules/mod_ssl.so    
b69dd000      8K rw---    [ anon ]                             
b69df000      8K r-x--  /usr/lib/apache2/modules/mod_setenvif.so
b69e1000      4K rw---  /usr/lib/apache2/modules/mod_setenvif.so
b69e2000   1128K r-x--  /usr/lib/libxml2.so.2.6.31              
b6afc000     20K rw---  /usr/lib/libxml2.so.2.6.31              
b6b01000      4K rw---    [ anon ]                              
b6b02000     80K r-x--  /lib/tls/i686/cmov/libnsl-2.7.so        
b6b16000      8K rw---  /lib/tls/i686/cmov/libnsl-2.7.so        
b6b18000      8K rw---    [ anon ]                              
b6b1a000    140K r-x--  /lib/tls/i686/cmov/libm-2.7.so          
b6b3d000      8K rw---  /lib/tls/i686/cmov/libm-2.7.so          
b6b3f000     60K r-x--  /lib/libbz2.so.1.0.4                    
b6b4e000      4K rw---  /lib/libbz2.so.1.0.4                    
b6b4f000      4K r-x--  /usr/lib/libxcb-xlib.so.0.0.0           
b6b50000      4K rw---  /usr/lib/libxcb-xlib.so.0.0.0           
b6b51000     56K r-x--  /usr/lib/apache2/modules/mod_rewrite.so 
b6b5f000      4K rw---  /usr/lib/apache2/modules/mod_rewrite.so 
b6b60000   5060K r-x--  /usr/lib/apache2/modules/libphp5.so     
b7051000    208K rw---  /usr/lib/apache2/modules/libphp5.so     
b7085000     20K rw---    [ anon ]                              
b708a000     28K r-x--  /usr/lib/apache2/modules/mod_negotiation.so
b7091000      4K rw---  /usr/lib/apache2/modules/mod_negotiation.so
b7092000     12K r-x--  /usr/lib/apache2/modules/mod_mime.so       
b7095000      4K rw---  /usr/lib/apache2/modules/mod_mime.so       
b7096000     36K r-x--  /usr/lib/apache2/modules/mod_include.so    
b709f000      4K rw---  /usr/lib/apache2/modules/mod_include.so    
b70a0000      4K r-x--  /usr/lib/apache2/modules/mod_env.so        
b70a1000      4K rw---  /usr/lib/apache2/modules/mod_env.so        
b70a2000      4K r-x--  /usr/lib/apache2/modules/mod_dir.so        
b70a3000      4K rw---  /usr/lib/apache2/modules/mod_dir.so        
b70a4000     20K r-x--  /usr/lib/apache2/modules/mod_cgi.so        
b70a9000      4K rw---  /usr/lib/apache2/modules/mod_cgi.so        
b70aa000     28K r-x--  /usr/lib/apache2/modules/mod_autoindex.so  
b70b1000      4K rw---  /usr/lib/apache2/modules/mod_autoindex.so  
b70b2000      4K r-x--  /usr/lib/apache2/modules/mod_authz_user.so 
b70b3000      4K rw---  /usr/lib/apache2/modules/mod_authz_user.so 
b70b4000      8K r-x--  /usr/lib/apache2/modules/mod_authz_host.so 
b70b6000      4K rw---  /usr/lib/apache2/modules/mod_authz_host.so 
b70b7000      8K r-x--  /usr/lib/apache2/modules/mod_authz_groupfile.so
b70b9000      4K rw---  /usr/lib/apache2/modules/mod_authz_groupfile.so
b70ba000      8K rw---    [ anon ]                                     
b70bc000     12K r-x--  /lib/libgpg-error.so.0.3.0                     
b70bf000      4K rw---  /lib/libgpg-error.so.0.3.0                     
b70c0000      4K rw---    [ anon ]                                     
b70c1000      8K r-x--  /lib/libkeyutils-1.2.so                        
b70c3000      4K rw---  /lib/libkeyutils-1.2.so                        
b70c4000     28K r-x--  /usr/lib/libkrb5support.so.0.1                 
b70cb000      4K rw---  /usr/lib/libkrb5support.so.0.1                 
b70cc000    136K r-x--  /usr/lib/libk5crypto.so.3.1                    
b70ee000      4K rw---  /usr/lib/libk5crypto.so.3.1                    
b70ef000    300K r-x--  /lib/libgcrypt.so.11.2.3                       
b713a000      8K rw---  /lib/libgcrypt.so.11.2.3                       
b713c000     80K r-x--  /usr/lib/libz.so.1.2.3.3                       
b7150000      4K rw---  /usr/lib/libz.so.1.2.3.3                       
b7151000      4K rw---    [ anon ]                                     
b7152000     60K r-x--  /usr/lib/libtasn1.so.3.0.12                    
b7161000      4K rw---  /usr/lib/libtasn1.so.3.0.12                    
b7162000    160K r-x--  /usr/lib/libgssapi_krb5.so.2.2                 
b718a000      4K rw---  /usr/lib/libgssapi_krb5.so.2.2                 
b718b000      8K r-x--  /lib/libcom_err.so.2.1                         
b718d000      4K rw---  /lib/libcom_err.so.2.1                         
b718e000    556K r-x--  /usr/lib/libkrb5.so.3.3                        
b7219000      8K rw---  /usr/lib/libkrb5.so.3.3                        
b721b000   1192K r-x--  /usr/lib/i686/cmov/libcrypto.so.0.9.8          
b7345000     84K rw---  /usr/lib/i686/cmov/libcrypto.so.0.9.8          
b735a000     16K rw---    [ anon ]                                     
b735e000    248K r-x--  /usr/lib/i686/cmov/libssl.so.0.9.8             
b739c000     16K rw---  /usr/lib/i686/cmov/libssl.so.0.9.8             
b73a0000    452K r-x--  /usr/lib/libgnutls.so.13.9.1                   
b7411000     20K rw---  /usr/lib/libgnutls.so.13.9.1                   
b7416000     88K r-x--  /usr/lib/libsasl2.so.2.0.22                    
b742c000      4K rw---  /usr/lib/libsasl2.so.2.0.22                    
b742d000     60K r-x--  /lib/tls/i686/cmov/libresolv-2.7.so            
b743c000      8K rw---  /lib/tls/i686/cmov/libresolv-2.7.so            
b743e000      8K rw---    [ anon ]                                     
b7440000      8K r-x--  /lib/tls/i686/cmov/libdl-2.7.so                
b7442000      8K rw---  /lib/tls/i686/cmov/libdl-2.7.so                
b7444000     36K r-x--  /lib/tls/i686/cmov/libcrypt-2.7.so             
b744d000      8K rw---  /lib/tls/i686/cmov/libcrypt-2.7.so             
b744f000    160K rw---    [ anon ]                                     
b7477000     28K r-x--  /lib/tls/i686/cmov/librt-2.7.so                
b747e000      8K rw---  /lib/tls/i686/cmov/librt-2.7.so                
b7480000     12K r-x--  /lib/libuuid.so.1.2                            
b7483000      4K rw---  /lib/libuuid.so.1.2                            
b7484000    124K r-x--  /usr/lib/libexpat.so.1.5.2                     
b74a3000      8K rw---  /usr/lib/libexpat.so.1.5.2                     
b74a5000    396K r-x--  /usr/lib/libsqlite3.so.0.8.6                   
b7508000      8K rw---  /usr/lib/libsqlite3.so.0.8.6                   
b750a000    120K r-x--  /usr/lib/libpq.so.5.1                          
b7528000      4K rw---  /usr/lib/libpq.so.5.1                          
b7529000   1172K r-x--  /usr/lib/libdb-4.6.so                          
b764e000      8K rw---  /usr/lib/libdb-4.6.so                          
b7650000      4K rw---    [ anon ]                                     
b7651000     48K r-x--  /usr/lib/liblber-2.4.so.2.0.5                  
b765d000      4K rw---  /usr/lib/liblber-2.4.so.2.0.5                  
b765e000    244K r-x--  /usr/lib/libldap_r-2.4.so.2.0.5                
b769b000      4K rw---  /usr/lib/libldap_r-2.4.so.2.0.5                
b769c000      8K rw---    [ anon ]                                     
b769e000   1316K r-x--  /lib/tls/i686/cmov/libc-2.7.so                 
b77e7000      4K r----  /lib/tls/i686/cmov/libc-2.7.so                 
b77e8000      8K rw---  /lib/tls/i686/cmov/libc-2.7.so                 
b77ea000     12K rw---    [ anon ]                                     
b77ed000     80K r-x--  /lib/tls/i686/cmov/libpthread-2.7.so           
b7801000      8K rw---  /lib/tls/i686/cmov/libpthread-2.7.so           
b7803000      8K rw---    [ anon ]                                     
b7805000    136K r-x--  /usr/lib/libapr-1.so.0.2.11                    
b7827000      4K rw---  /usr/lib/libapr-1.so.0.2.11                    
b7828000      4K rw---    [ anon ]
b7829000    100K r-x--  /usr/lib/libaprutil-1.so.0.2.11
b7842000      4K rw---  /usr/lib/libaprutil-1.so.0.2.11
b7843000    152K r-x--  /usr/lib/libpcre.so.3.12.1
b7869000      4K rw---  /usr/lib/libpcre.so.3.12.1
b786a000      4K r-x--  /usr/lib/apache2/modules/mod_authz_default.so
b786b000      4K rw---  /usr/lib/apache2/modules/mod_authz_default.so
b786c000      4K r-x--  /usr/lib/apache2/modules/mod_authn_file.so
b786d000      4K rw---  /usr/lib/apache2/modules/mod_authn_file.so
b786e000     24K r-x--  /usr/lib/apache2/modules/mod_auth_digest.so
b7874000      4K rw---  /usr/lib/apache2/modules/mod_auth_digest.so
b7875000      8K r-x--  /usr/lib/apache2/modules/mod_auth_basic.so
b7877000      4K rw---  /usr/lib/apache2/modules/mod_auth_basic.so
b7878000      8K r-x--  /usr/lib/apache2/modules/mod_alias.so
b787a000      4K rw---  /usr/lib/apache2/modules/mod_alias.so
b787b000      8K rw---    [ anon ]
b787d000      4K r-x--    [ anon ]
b787e000    104K r-x--  /lib/ld-2.7.so
b7898000      8K rw---  /lib/ld-2.7.so
bfd68000     76K rwx--    [ stack ]
bfd7b000      8K rw---    [ anon ]
 total   119008K

我不知道发生了什么。我尝试调整常用参数(MaxClients、MaxRequestsPerClient 等),但这些参数没有任何作用。还请注意,这是启动时的内存使用量 - 它不会增长,只是像这样开始,然后或多或少保持恒定。

有想法吗?

答案1

您有很多虚拟主机吗?您使用 mod_balance 吗?

我们有一个系统,其中 apache2 用作 mod_perl/apache13 后端的前端。Apache2 在每个连接上消耗了大量内存(30-40mb 非共享内存,我们很容易同时拥有 100 个连接)。事实证明,我们设置虚拟主机 + 负载平衡的方式在 apache2 系统中并不是真正最佳的:我们的 200 多个客户端中的每一个都在我们的 apache13 后端上分配了一个专用端口,前端使用基于名称的虚拟托管,并将负载平衡到 4 个后端节点之一,直接到“客户端端口”。每个客户端都需要自己的“平衡器”部分,位于 apache2 中自己的 vhost 部分之上。nginx 也需要单独的平衡器配置,但它似乎处理得更优化。我们将 apache2 的总内存从 500-600mb 减少到 40-50mb最高额对于 nginx。

Nginx 使我们不必大肆扩展硬件,我们从未后悔过。您可能要考虑在设置中使用 php-fcgi + nginx 或 lighttpd,您可能会看到更好的内存使用率数据。

答案2

您的 apache 配置会影响 apache2 进程的数量,但是,除非加载了太多模块,否则它不太可能导致内存使用率过高。您可以查看 /etc/apache2/mods-enabled/ 以查看加载了哪些内容,并删除不需要的内容。

由于 Ubuntu 基于 Debian,我假设安装的每个 php5-* 模块都会占用相当多的 RAM。

检查 /etc/php5/conf.d/ 并查看其中有哪些模块。您可能会在那里找到不需要的模块:

/etc/php5/conf.d:
curl.ini  imap.ini    memcached.ini  mhash.ini   mysql.ini  pdo_mysql.ini
gd.ini    mcrypt.ini  memcache.ini   mysqli.ini  pdo.ini

你的内存使用情况并没有那么糟糕:

# ps aux|grep apache
www-data  1907  0.1  0.1 212372 13352 ?        S    17:39   0:09 /usr/sbin/apache2 -k start

如果您不需要 pdo 或 imap,您可以禁用它们以减少内存使用量。

相关内容