服务器8核16g内存,同时有1000多人在抢红包,有502怎么办?

发布于 2022-09-01 16:20:29 字数 591 浏览 11 评论 0

lnmp环境,服务器8核16g内存!
php-fpm中的配置

pm = static
pm.max_children = 200

9点钟开始的抢红包,一开始,1000多并发,然后就502,这还有办法处理吗?
php-fpm的日志中也没有什么异常
图片描述

以前没改pm.max_children的时候,是有错误信息的

WARNING: [pool www] server reached pm.max_children setting (10), consider raising it

今天就没有了,但是还有502。
但是并发少了,就没有502了
请问,这内存使用情况正常吗?
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

橪书 2022-09-08 16:20:29
  1. 设置php-fpm.conf 里的 request_slowlog_timeout 和 slowlog,记录慢日志,看慢在哪里,我一般设置1s
  2. 设置php-fpm.conf 里的 request_terminate_timeout,将过慢的请求干掉,我一般设置3s
  3. 8核16G才开200个进程太少了,至少1000起
  4. 打开php的apc或者opcache等oplog缓存,CPU使用率大幅下降
  5. 找到耗时原因是正道,看慢日志,然后程序上好好优化吧
羅雙樹 2022-09-08 16:20:29

个人在双核四线程的i5-3230M(Ubuntu)上做PHP-FPM压力测试,在保持Nginx工人进程不变的情况下,开启5个PHP-FPM工作进程和10个PHP-FPM工作进程的测试结果并没有多大区别.

但可以肯定的是,过多的PHP-FPM进程反而会增加CPU上下文切换的开销,除非你的PHP代码中有curl或者file_get_contents这些可能会产生较大网络I/O耗时的代码,这时开更多的PHP-FPM进程可能会好一些.

在php-fpm.conf中把request_slowlog_timeout设为1秒,在slowlog中查看是否有这些耗时超过1秒的代码.优化代码,能够为所有PHP-FPM工作进程减负,这个才是提高性能的根本方法.个人认为,PHP-FPM工作进程数,设置为2倍CPU核心数就足够了.毕竟,Nginx和MySQL以及系统同样要消耗CPU,根据内存来设置PHP-FPM数是非常不合理的,把内存分配给MySQL,Memcached这些服务显然更合适.

内存占用(RES)方面,PHP-FPM的16MB还是很正常的,倒是Nginx占用29MB就比较奇怪了,一般一个Nginx工作进程只会占用不到5MB的内存,所以,也看看Nginx的错误日志,建议安装稳定版本的Nginx.

寄意 2022-09-08 16:20:29

才1000并发就扛不住啦?
根据pm配置应该是由于请求处理时间太长导致的502,有没有测过单个请求平均耗时多少?

建议优化下PHP代码,比如使用万能的缓存,优化SQL等

此外,如果抢红包持续时间不长的话,可以考虑把PHP执行超时时间设置长一点,但估计帮助不大

﹉夏雨初晴づ 2022-09-08 16:20:29

502一般是后端数据库的问题(或类似读取数据等耗时太长的操作)。php自身是没有什么理由去502的。抢红包这种还是上redis吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文