连接数上万时websocket就会出现php_network_getaddresses

刘思君

目前的功能对bu进程发送及时返回的消息比较多,分别开了gw和bu 32个进程,之前1核4g的服务器每当到了10000左右的连接数时,status查看 bu进程已经会出现n/a了,功能也用不了,之前以为是服务器的原因就加到了4核4g但是现在到了10000连接数时还是这样,查看日志报php_network_getaddresses这个错误,难道连接数过多了就会出现这个错误吗

阅读 3044
10个回答

walkor

php_network_getaddresses这个看不到具体错误,把具体错误贴出来吧。

  • 暂无评论
刘思君

开始以为是数据库的原因,后来换了个配置更好好的数据库但是到了10000左右还是会出现这这问题,但通过实际情况来看这样的请求并不会让数据库有压力,在阿里云数据库上查看数据库状态都是良好,另外再加一句10000以下时业务正常,不会出现异常

  • 暂无评论
walkor

看起来是数据库用了域名,用域名连接数据库时dns返回失败导致的。
看看能否直接使用ip,不用域名。

  • 刘思君 2018-07-04

    用的是阿里云的数据库,好像只能用域名,而且并不是直接就连接不上,每次websocket超过10000左右就会出现问题

爆肝

数据库不支持那么多连接,特别是你用了数据库长连接之类的,要考虑php对数据库的释放吧。
你可以在RDS里看看数据库的连接数日志,如果是由于连接数过多的问题,你可以从架构上调整一下,数据库句柄的销毁。

  • 刘思君 2018-07-04

    我把阿里云短链接优化打开了,待会看看还会不会出现问题

刘思君

问题还是出现了 pdo连接数据库已经是短链接了 阿里云也做了短链接优化,现在有是个瓶颈了

  • 暂无评论
刘思君

问题还是出现了 pdo连接数据库已经是短链接了 阿里云也做了短链接优化,现在有是个瓶颈了

  • 暂无评论
walkor

ping下数据库的域名获得ip,然后用ip连试下

  • 刘思君 2018-07-05

    阿里云数据库好像不能用ip连接 ping也可以ping通

  • walkor 2018-07-05

    得到ip后可以在服务器上配置个数据库域名的host,这样还是通过域名访问,但是不会走dns,就不会有问题了

  • 刘思君 2018-07-05

    @1:嗯嗯 用ip确实可以 之前以为只能用域名 谢谢了 今晚上看看还会不会出现情况

刘思君

昨天晚上问题还是出现了,到了10000左右连接数时又是那种情况,这一次workerman的日志也没有打印了

  • 暂无评论
walkor

日志没打印了说明php_network_getaddresses的问题应该解决了。

1、有问题时截图下 php start.php status ,截图截全

2、另外参照手册优化下linux内核,每一项都不要落下
http://doc.workerman.net/appendices/kernel-optimization.html
优化完毕后重启workerman,要restart重启,不能reload

  • 刘思君 2018-07-06

    event扩展之前没装上就没有装,但是开了32个进程应该没问题吧

  • walkor 2018-07-06

    根据手册,超过1000连接必须安装event扩展,内核必须优化

  • 刘思君 2018-07-10

    @1:内核已经优化.event我之前不了解,看了之后了解到应该是优化每个进程的连接数,那么我开32个进程没安装event,如果在30000个连接数内是不是就不需要event

  • walkor 2018-07-10

    30000个连接,你没办法保证每个进程都不超过1000个连接

  • 刘思君 2018-07-10

    哦哦 你的意思是即使开了多进程,每个连接到了1000还是会继续增加,不会分配到别的进程去?

  • walkor 2018-07-10

    对,workerman没有限制每个进程的最大连接数。而且限制1000也不科学

szh

您好,我也用的阿里云数据库。我连接时就报错了,一直连不上,这块你做了什么处理么,求告知,谢谢了

  • 暂无评论