服务器8核16g内存,同时有1000多人在抢红包,有502怎么办?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
个人在双核四线程的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.
才1000并发就扛不住啦?
根据pm配置应该是由于请求处理时间太长导致的502,有没有测过单个请求平均耗时多少?
建议优化下PHP代码,比如使用万能的缓存,优化SQL等
此外,如果抢红包持续时间不长的话,可以考虑把PHP执行超时时间设置长一点,但估计帮助不大
502一般是后端数据库的问题(或类似读取数据等耗时太长的操作)。php自身是没有什么理由去502的。抢红包这种还是上redis吧。