Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92774
  • 博文数量: 33
  • 博客积分: 1088
  • 博客等级: 少尉
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-30 13:59
文章分类

全部博文(33)

文章存档

2011年(18)

2010年(9)

2009年(6)

分类: 系统运维

2011-03-08 16:15:30

nginx php-fpm配置过程中最大问题是内泄漏出问题:服务器的负载不大,但是内存占用迅速增加,很快吃掉内存接着开始吃交换分区,系统很快挂掉!

google了一天,终于发现些有用的东西,其实根据官方的介绍,php-cgi不存在内存泄漏,每个请求完成后php-cgi会回收内存,但是不会释放给操作系统,这样就会导致大量内存被php-cgi占用。

官方的解决办法是降低PHP_FCGI_MAX_REQUESTS的值,我用的是php-fpm,对应的php-fpm.conf中的就是max_requests,该值的意思是发送多少个请求后会重启该线程,我们需要适当降低这个值,用以让php-fpm自动的释放内存,不是大部分网上说的51200等等,实际上还有另一个跟它有关联的值max_children,这个是每次php-fpm会建立多少个进程,这样实际上的内存消耗是max_children*max_requests*每个请求使用内存,根据这个我们可以预估一下内存的使用情况,就不用再写脚本去kill了。

下面其实是重启脚本的过程,并不是什么很严重的事情,但是我们要小心,不是说一直重启就是好的,因为重启会导致cpu的使用率飙升,系统负载巨大,所以还是平衡上面的数据比较重要。

Mar 08 16:13:33.113138 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD Mar 08 16:13:33.113202 [WARNING] fpm_children_bury(), line 215: child 23051 (pool default) exited on signal 11 SIGSEGV after 747.428492 seconds from start Mar 08 16:13:33.113622 [NOTICE] fpm_children_make(), line 352: child 24511 (pool default) started
阅读(3154) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

luanqibazao2011-08-08 00:05:30

sunw_dream: 我觉得你的概念不对.max_children*max_requests*是错误的.

这个问题目前的最好解决办法可能是张宴的设置,

How much requests each process should execut.....
设置的数字我们都是一样到,128和1024,但是我更希望知道为什么要这么设置?不太明白你说到这个错误是指的什么?
从应用中来看,使用session保持的情况下,子进程被杀死并不会带来太多的用户体验问题,可能会比不杀死子进程速度稍有差异,对于用户来说,更多的是网络问题,这点微小的差异基本感觉不到。

sunw_dream2011-05-18 21:55:12

另外一点,吃内存是EA的问题,不是PHP-FPM的

sunw_dream2011-05-18 02:05:54

我觉得你的概念不对.max_children*max_requests*是错误的.

这个问题目前的最好解决办法可能是张宴的设置,

How much requests each process should execute before respawn.
      Useful to work around memory leaks in 3rd party libraries.
      For endless request processing please specify 0
      Equivalent to PHP_FCGI_MAX_REQUESTS
      <value name="max_requests">1024</value>