PHP生产环境优化(nginx+php7)

系统上线半年多,最近频繁出现 504 Gateway Time-out,重启php-fpm问题暂时解决。所以写此文章记录调优过程。

Tip

根据情况可以分析,问题主要出在php-fpm上,各种谷歌后,找到部分推荐配置,解决php-fpm卡顿或崩溃的方法。

第一步,查看服务器硬件配置,对症下药。

1.查看cpu信息
cat /proc/cpuinfo

PHP生产环境优化(nginx+php7)_第1张图片
image.png

2.查看内存(主要)
cat /proc/meminfo

PHP生产环境优化(nginx+php7)_第2张图片
image.png


free

image.png

total:总内存3.7G
used:已用内存360M
free:系统预留
available:可用内存 3.2G(得到这个值,就知道后面的maxchild如何设置了)

知道这几个就可以了。

第二步:开始修改环境配置

  1. max_children
;摘自,php-fpm.conf 。默认值
pm = dynamic
; 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

默认最大cgi 数量为5,为了节约资源

dynamic 和 static 该如何选择?

  • static(静态) :表示在fpm运行时直接fork出pm.max_chindren个worker进程
  • dynamic(动态):表示运行时fork出start_servers个进程,随着负载的情况,动态的调整,最多不超过max_children个进程
    由于我们公司服务器只跑php,所以不用考虑内存占用影响其他业务效率额问题,所以选择static,静态分配,提升效率。

tip:一般推荐用static,优点是不用动态的判断负载情况,提升性能,缺点是多占用些系统内存资源

  • max_children这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。
    设置”max_children”也需要根据服务器的性能进行设定,这是为什么要查看系统空闲内存。
  • 一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右假设“max_children”设置成100个,20M*100=2000M也就是说在峰值的时候所有PHP-CGI所耗内存在2000M以内。
    假设“max_children”设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。

最终设置

pm = static
max_children = 150 
;150*20M=3G 内存左右,空闲3.2。

你可能感兴趣的:(PHP生产环境优化(nginx+php7))