apache占用内存高解决办法
http://my.oschina.net/vvcumt/blog/498828
我用512M的vps,访问量不大,但内存占用很大,甚至宕机。
我用top,然后shitf+m发现,httpd占用内存极大。经过网上找资料设置后,用过一段时间终于没再出现内存问题了。
首先查找配置文件的位置,可以用如下命令:
find/-namehttpd.conf
找到配置文件/usr/local/apache/conf/extra/httpd-mpm.conf,修改设置ApacheMPMPrefork模块
StartServers3
MinSpareServers2
MaxSpareServers5
ServerLimit256
MaxClients256
MaxRequestsPerChild40
我原来的MaxRequestsPerChild是为0,问题应该在此。
StartServers设置了服务器启动时建立的子进程数量
MinSpareservers和MaxSpareServers分别设置空闲子进程的最小和最大数量
ServerLimit则是控制MaxClients所能使用的最大值。缩减MaxClients能让运行动态内容(比如:WordPress)的服务器有很大的改变。如果你的VPS遭遇到流量的大幅增加,而你的MaxClients设置的太高的话,你的服务器将会无限循环工作于从物理内存交换页面到虚拟内存中,最终导致宕机。一般计算适当的MaxClients值取决于你总共可用的系统内存除于每个Apache进程使用的内存。例如,如果你还有500MB的内存可用于Apache,每个Apache进程大约使用20MB的内存,你可以设置你的MaxClients为(512-12)/10=50(这个计算好像原文中有误)。使用命令top可以得到你VPS实时内存的使用。
MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild数字”个请求之后,子进程将会被父进程终止,这时候子进程佔用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。如果MaxRequestsPerChild预设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果佔用了200~300M内存,即使负载下来时佔用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成50、100、200,以防内存溢出。
找到配置文件/usr/local/apache/conf/extra/httpd-default.conf,修改KeepAlive设置
#Timeout:Thenumberofsecondsbeforereceivesandsendstimeout.
#
Timeout30
#
#KeepAlive:Whetherornottoallowpersistentconnections(morethan
#onerequestperconnection).Setto“Off”todeactivate.
#
KeepAliveOn
#
#MaxKeepAliveRequests:Themaximumnumberofrequeststoallow
#duringapersistentconnection.Setto0toallowanunlimitedamount.
#Werecommendyouleavethisnumberhigh,formaximumperformance.
#
MaxKeepAliveRequests120
#
#KeepAliveTimeout:Numberofsecondstowaitforthenextrequestfromthe
#sameclientonthesameconnection.
#
KeepAliveTimeout5
Timeout是一个连接多少时间后断开,这个参数设置在30-60是一般的php程序都是适用的,至少要运行一些要占用大量时间的php程序,那么适当调高也是可以的,但请不要太高,否则会影响apache性能,本次优化我们使用30就很足够了。
MaxKeepAliveRequests是一个连接最大的请求量,对于页面有较多的图片等元素,可以适当调高一点,对于一般的网页设置在80-120是足够的,我们就设置为120,如果设置太高会导致httpd长时间不能退出释放内存的。
KeepAliveTimeout是当用户处理一次连接时,如果在该参数的时间内还有请求则会继续执行,不需要重新创建新的连接,直到达到MaxKeepAliveRequests的最大值才会退出。对于perfork模式下的,有人认为是将KeepAliveOff会比较好,但是对于绝大多数的网站都会不多不少有些图片元素,所以将该项打开,并将KeepTimeOut设置在2-5秒,不但有效提高服务器性能,也能加快页面打开速度。
如果还需要优化可以考虑修改启动的模块,Wordpress主要使用以下模块,保留这些其他的可以注释掉
LoadModuleauthz_host_modulemodules/mod_authz_host.so
LoadModulelog_config_modulemodules/mod_log_config.so
LoadModuleexpires_modulemodules/mod_expires.so
LoadModuledeflate_modulemodules/mod_deflate.so
LoadModuleheaders_modulemodules/mod_headers.so
LoadModulesetenvif_modulemodules/mod_setenvif.so
LoadModulemime_modulemodules/mod_mime.so
LoadModuleautoindex_modulemodules/mod_autoindex.so
LoadModuledir_modulemodules/mod_dir.so
LoadModulealias_modulemodules/mod_alias.so
LoadModulerewrite_modulemodules/mod_rewrite.so
LoadModulenegotiation_modulemodules/mod_negotiation.so