当前位置:首页 > 运维 > 正文内容

php Swoole 在supervisor或systemd下高并发频发redis mysql连接失败

MuWind10个月前 (07-13)运维117

*前提:在你操作之前请先按照Swoole官方操作文档对内核修改完成后再看本文:

文档地址:https://wiki.swoole.com/#/other/sysctl

汇率的API写好了,Swoole内网测试并发总会发生诸如redis went away的问题而导致502,当redis在同步模式下运行的时候无此问题,仅在Swoole一键协程化的时候出现:

image.png

如果按照官方文档的步骤做了,确认redis等没有挂掉,请在screen下直接运行,而非在supervisor或者systemd下作为服务运行

你会惊奇的发现:screen下运行没有这个问题了(除非你服务确实挂了)

在百度和谷歌搜了很久,基本没有对这个问题的解答,这个问题解决了几天才发现这么一篇:

https://medium.com/@white1033/%E8%A7%A3%E9%96%8Bcentos-%E5%88%A9%E7%94%A8systemd-%E8%B5%B7service-%E7%9A%84-ulimit-%E8%B3%87%E6%BA%90%E9%99%90%E5%88%B6-4b8dece0d61d

以systemd为例,supervisor的原因也是一样的,都是deamon自身限制文件句柄导致的。

vi /etc/systemd/system/yourself_service.service

将[Service]配置项下加一行,最终修改结果如下:

[Service]
LimitNOFILE=100400

最后使用

systemctl deamon-reload

重启deamon,最后重启服务,查看效果:

image.png

7k并发测试后无任何报错

“php Swoole 在supervisor或systemd下高并发频发redis mysql连接失败” 的相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。