php-fpm (pool default) executing too slow

近期管理的一个ecshop网站经常将vps拖死,vps用的是nginx+php-fpm+mysql,经查询php-fpm的slow日志发现如下错误,类似的错误有9-10条:

  
  
  
  
  1. fpm_request_check_timed_out(), line 146: child 17959, script 
  2. '/www/www.XXX.com//user.php' (pool default) executing too slow (5.101559 sec), 
  3. logging Sep 28 11:33:47.052981 [NOTICE] fpm_got_signal(), line 48: 
  4. received SIGCHLD 

判断是mysql查询时间超过5秒导致,看了下php-fpm.conf的设置,我给php-fpm开的子进程为8个,设置的最大执行时间为5s,恰好吻合。

初步进行如下调整,将php-fpm的最大执行时间设置为10秒,如下:

  
  
  
  
  1. Time limit on waiting child's reaction on signals from master 
  2.  <value name="process_control_timeout">10s</value> 

然后将最大子进程书设置为20,先观察一段时间。

进一步查看了mysql满查询日志,发现有一条查询多次执行超过5秒,估计是这个问题引起的,也印证了上面的判断和处理,那条查询如下:

  
  
  
  
  1. SELECT COUNT(f.msg_id) FROM `book`.`ecs_feedback` AS f 
  2. LEFT JOIN `book`.`ecs_feedback` AS r 
  3. ON r.parent_id=f.msg_id WHERE f.parent_id=0 AND ISNULL(r.msg_id) 

有机会把它优化一下。
 

你可能感兴趣的:(mysql,php-fpm)