I block ads too. Donate?

减少php-fpm的内存消耗

2013-11-04 19:21:29

[服务器开发] , , , ,

 

最近发现服务器内存消耗方面php-fpm占的比例确实是很重的,
php-fpm其实也提供了一个很好的机制来控制内存,也就是通过动态控制线程的数量来达到控制内存的消耗,

本文主要讲述的是通过两方面来达到控制php-fpm的内存

第一种方法  对php-fpm进行设定

 

本文适用于CentOS 6    x86_64

以及 php-fpm-5.3.3-23.el6_4.x86_64

 

php-fpm 设定档的通常位置是

我们可以用vim打开它

 

主要看的还是这几个参数

 

 

 

 

将php-fpm reload 一下你用pstree看就能够看到线程的数量的,如果没有人访问的情况下,往往是跟pm.start_servers是一致的

这时候可以再看看主机的实时内存是多少,根据你的需要调整数值

 

 第二种方法 定时对php-fpm进行reload

有时候你会发现,php-fpm的线程控制并不是那么的科学,它要过很长时间才会关闭线程并释放内存,另外一方面,php-fpm的插件也不可避免地会有或多或少的内存泄露,我们怎样才能够更加主动的关闭php-fpm呢.

这里讲述的会是其中一种特别有用的解决方案,就是用crond来定时执行sh脚本,通过sh来定时reload php-fpm,来达到释放内存的效果.

 

crond在非精简版(Minimal) 的CentOS里面应该是标准配置.

通过chkconfig 将crond设置为开机启动并打开crond

 

sh脚本方面也是相当简单,就是一句话

保存为sh

注意,应该要开启执行的权限

打开crond设置档

输入

当然这里因人而异了,我这里设置是没一小时释放一次内存,最后将输出导向linux的黑洞,不发送烦人的crond电子邮件.

当然,十分要注意的是,线程的打开其实是需要时间的,但是很多情况下感觉不到,特别是第二次访问的时候,所以,当你的网站访问量不是很大的时候,没有必要太担心.总而言之,这些数值方面都要经过自己的精心调配吧

 

 

 

------

经过一段时间的调试,发现php-fpm 的内存消耗其实还跟Nginx 的监听数量呈正相关. 因此尽量减少Nginx的监听数量也是很有用的,特别是在多个IP的主机里面,最好不要共同监听全部IP的80端口.

2013年12月19日更新

 

 

 

 

 

------

最近才发现,OpenVZ的主机可能存在一些内存管理方面的漏洞,导致无法释放内存,个人建议,挑选VPS的时候还是尽量不要使用OpenVZ架构下的虚拟主机,如果可以尽量使用Xen架构的。因为内存管理问题,可能导致php-fpm和mongodb之类的产品在OpenVZ主机上面内存出现巨额消耗。

 

在几乎相同的设置的Xen主机上面就没有这样的问题。

2014年7月29日更新

 

这篇博文发表在 服务器开发 目录下,标签为 , , , ,
版权所有,请勿转载。如需引用,请使用链接:https://note.masterchan.me/?p=24
 

您的邮箱地址不会被公开,评论使用Gravatar头像。
Your email address will not be published. This blog is using Gravatar.

正在提交评论...
正在为您准备评论控件