首页 » Web开发 » 正文

[LNMP]内存优化

问题描述

最近我的服务器出现了一个问题,内存不够的时候,常常kill掉我的tomcat。因为访问量整体不算大,目前LNMP、Tomcat都在一台机器上,但是这就导致了Tomcat相关的java应用无法使用。

free -m

查看内存情况发现,操作系统的内存只剩下60MB左右,几乎用尽。
这种状况持续了1个月,当时一直如鲠在喉。中间想过增加内存,又嫌贵。当资源不够的时候一般有两种思路,第一种是增加资源,第二种是优化现有资源。对于我这有的穷人来说,第二种常常是我首选的方法。

开始我以为是tomcat自身或者别的进程太吃内存,用

top

命令查看后发现,php-fpm进程常常是占用内存最多的进程。

查看消耗内存最多的前40个进程:

ps auxw|head -1;ps auxw|sort -rn -k4|head -40

发现前40的进程中,php-fpm占了绝大部分,而且占用率从2%到7%不等,问题已经很明显了。罪魁祸首就是php-fpm。

解决问题

可以通过配置 pm.max_children 属性,控制php-fpm子进程数量,首先,打开php-fpm配置文件,执行指令:

vim /etc/php-fpm.d/www.conf

pm.max_children 默认值为50,每一个进程占用1%-2.5%的内存,加起来就耗费大半内存了,尝试将其值调小,博主这里将其设置为25(也是参考了其他博客),同时,检查以下两个属性:

pm.max_spare_servers : 该值表示保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.min_spare_servers : 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程;

这两个值均不能不能大于 pm.max_children 值,通常设置 pm.max_spare_servers 值为 pm.max_children 值的60%-80%。

最后,重启php-fpm

service php-fpm restart

再次查看内存

free -m

发现有600MB内存的剩余,就算启动tomcat之后,也能剩余300MB。

参考链接:
https://www.jb51.net/article/129528.htm

发表评论

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax