php-fpm优化

1.子进程最大数: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这个错误。

2.最小进程数:start_servers
pm.start_servers的默认值为2。并且php-fpm中给的计算方式也为:
{(cpu空闲时等待连接的php的最小子进程数) + (cpu空闲时等待连接的php的最大子进程数 - cpu空闲时等待连接的php的最小子进程数)/ 2};
用配置表示就是:min_spare_servers + (max_spare_servers - min_spare_servers) / 2;
一般而言,设置成10-20之间的数据足够满足需求了。

3.空闲进程数最小值:min_spare_servers
保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程


4.空闲进程数最大值:max_spare_servers
保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

5.最大请求数:max_requests
最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。
这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。
pm.max_requests = 10240
当一个 PHP-CGI 进程处理的请求数累积到 max_requests 个后,自动重启该进程。
502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的.
但是为什么要重启进程呢?
如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长(比如第三方库有问题等)。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。
正是因为这个机制,在高并发中,经常导致 502 错误
目前我们解决方案是把这个值尽量设置大些,减少 PHP-CGI 重新 SPAWN 的次数,同时也能提高总体性能。PS:刚开始我们是500导致内存飙高,现在改成5120,当然可以再大一些,10240等,这个主要看测试结果,如果没有内存泄漏等问题,可以再大一些。

6.最长执行时间:request_terminate_timeout
设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ‘0’ 表示 ‘Off’.当经常出现502错误时可以尝试更改此选项。
这两项都是用来配置一个PHP脚本的最大执行时间的。当超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。
Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。

7.尽量少安装PHP模块,最简单是最好(快)的
8.文件描述符的限制  rlimit_files

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值