php-fpm配置不当,导致服务器经常出现502错误,上个学期多次调整都没有解决,网上找来资料,大都是增加max_children,可是我都加到顶了,php-fpm log里面还是有大量的警告:

eems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 88 total children

不想看英文,一看就头晕,但是502更头晕,特别是昨天,刚重启了lnmp没多久,容不得松口气,就看到负载飙到20多,一开网站,又特么502了。

硬着头皮看默认配置里面的英文注释,才发现自己的三个参数配置貌似有相当大的问题:

Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives. With this process management, there will be
;             always at least 1 children.
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
;  ondemand - no children are created at startup. Children will be forked when
;             new requests will connect. The following parameter are used:
;             pm.max_children           - the maximum number of children that
;                                         can be alive at the same time.
;             pm.process_idle_timeout   - The number of seconds after which
;                                         an idle process will be killed.
; Note: This value is mandatory.

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 5
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 2
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 1
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 3

注释上貌似是说,static模式时,只有pm.max_children生效,dynamic模式时,pm.max_children依然生效,另外:

pm.start_server  #控制服务启动时创建的进程数,

pm.min_spare_servers  #控制最小备用进程数

pm.max_spare_servers  #最大备用进程数

spare_servers翻译成备用进程,不知道合适不适合,如果真这样,那我之前的配置就让人无奈了: pm.min_space_servers 20,pm.max_spare_servers 80,pm.max_children 80,会不会是因为备用的太多才导致502呢?

另外,下面的具体配置里面,注释中给出了计算pm.start_servers默认值的公式:

Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

按这个公式,我之前的pm.start_servers应该是 20+(80-20)/2=50,可是我当时设置的是20…

重新规划如下:

pm = dynamic
pm.max_children =80
pm.start_servers = 12
pm.min_spare_servers = 4
pm.max_spare_servers = 20
rlimit_files = 65535
pm.max_requests = 102400

貌似要好点了,内存使用不像之前那么夸张了:

最新文章

  1. DXUT源码阅读笔记
  2. 关于textarea中换行、回车、空格的识别与处理
  3. 使用HTTP方式远程连接PowerShell
  4. 淘宝前端工程师:国内WEB前端开发十日谈
  5. 在ubuntu14.04上配置cuda_caffe_cudnn_anaconda_digits
  6. Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
  7. java面试每日一题5
  8. win7中protel99添加元件库
  9. WPF解析PDF为图片
  10. jquery通过ajax-json访问java后台传递参数,通过request.getParameter获取不到参数的说明
  11. C#(asp.net)备份还原mssql数据库代码【转】
  12. poj 1907 Work Reduction_贪心
  13. Saiku对Measure(指标)查询结果进行计算后显示的方法
  14. Vue H5 History 部署IIS上404问题
  15. windows 配置 Scheme + Emacs 编程环境
  16. python基础2 day3
  17. 安卓触控一体机的逆袭之路_追逐品质_支持APP软件安卓
  18. 关于gulp-sftp上传到服务器
  19. C#/VB.NET 操作Word批注(二)——如何插入图片、读取、回复Word批注内容
  20. SQLI DUMB SERIES-20

热门文章

  1. 织梦忘记密码DedeCMS密码重设工具radminpass找回密码
  2. 获取 Windows Phone 的 User-Agent 字符串
  3. C#多线程(Thread)开发基础
  4. java连接AD域
  5. Select, Poll,Epoll
  6. java实现根据起点终点和日期查询去哪儿网的火车车次和火车站点信息
  7. 邓_ Php·面试
  8. Oracle查看哪些表被锁住了
  9. JavaScript实验一(添加节点,删除节点)
  10. redis 在 Linux 和 Windows 上的安装配置