南京华籁云信息技术有限公司
18066058025 025-85999293
  1. 首页 > 解决方案 > 技术博客

服务器内存占用一直很高重启服务器后占用还是在逐渐上涨

作者:华籁云 日期:2019-10-13 11:08:40 点击数:

我有个配置比较低的搬瓦工 VPS,1G的内存。最近发现服务器内存占用一直很高,重启服务器后,内存占用还是在逐渐上涨,甚至连 swap 都会被占满。使用 top 命令查看进程内存使用情况,发现 httpd 进程占用内存过高,几乎占掉了系统内存的80%。

1-191013111112495.jpg

使用 top 命令查看进程内存占用

经查找各种资料,发现内存占用过高问题可能是受 httpd.conf 中的 MaxRequestsPerChild 参数影响。

MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。如果 MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。是不是有点晕,简单来说就是,如果 MaxRequestsPerChild 参数设置为0,那么将不会终止子进程释放内存。


于是,使用 find 命令搜索该参数的配置文件 httpd-mpm.conf 所在位置。

# find / -name httpd-mpm.conf


发现其位于 /usr/local/apache/conf/extra/httpd-mpm.conf ,首先复制一个配置文件副本备份,以防不测。继续使用 vi 编辑器打开该文件,找到参数位置。需要注意,该参数名称在 Apache HTTP Server 2.3.9 及更高版本中已经修改为 MaxConnectionsPerChild。

通过 httpd -V 命令查看当前 Apache 运行模式,找到对应运行模式里的参数。可见该参数此时为0,尝试修改其为一个较小数值,我这里修改为50。

1-191013111122935.jpg

重启服务器,测试了1天,效果不错,内存和 swap 的占用率都下来了,成功。


关于我们:华籁云(www.hualaiyun.cn)隶属南京华籁云信息技术有限公司,是一家专注于网站及服务器综合业务提供商。服务包括:南京网站建设南京域名注册南京虚拟主机南京服务器租用南京服务器维护南京网站维护,公司配有客服、技术、开发等部门,拥有数名安全专家,7*24为用户提供技术服务。

欢迎联系华籁云(HUALAIYUN)我们将竭诚为您服务!

接待地址:南京市文景路61号垠坤创芯汇(各区均有办公接待处) 贴心服务:一个电话免费预约来访或者上门洽谈


随便看看