businessworker突然全掉了,重启半小时后又全部掉了

1.平时晚上10点左右业务量都比较低了,但是昨天晚上BusinessWorker进程突然全没了,查看log日志,发现只有昨天凌晨时候有一次错误4,可能是有链接连接到register上了,但晚上10点左右日志并没有记录下来任何东西,应该不是这个错误吧。但保险起见,还是把注册地址改成127.0.0.1了($register = new Register('text://127.0.0.1:xxxx');)。在重启gatewayworker的过程日志记录了错误,stop的时候显示stopping。。。见左下图。然后出现worker exit unexpected;can not connect to tcp://127.0.0.1:xxxx Connection refused in workerman/gateway-worker/src/Lib/Gateway.php:725;exit with status 64000三个错误,重启成功后,businessworker恢复正常,但是半个小时后,BusinessWorker进程又全部没了,不知道为什么。查看阿里云监控发现在两次businessworker全掉的时候cpu,进程数和负载都大幅上涨,是因为businessworker掉线造成的吗?

2.第二次重启时怀疑是进程数不够,于是增加了businessworker数量,由40增加到50,我的cpu内核是2核。与此同时我发现我的nonestablished连接数达到了22000左右,发现原来因为遇到一些问题把net.ipv4.tcp_max_tw_buckets参数改成22000了,于是又把这个参数改成了20000。这次重启后系统没有出现businessworker掉的情况。
 
3.出现businessworker掉线的时候,发现所有设备连接都是通信超时而不是断开连接。
 
4.GatewayWorker重启后,TCP活跃连接数每35分钟会稍微波动一下,我们设备是35分钟会自动发送一条登录信息过来,短时大量的消息过来,会造成TCP活跃数波动吗?见右下图
微信图片_20190903101328_副本.png 微信图片_20190903101334.png
已邀请:

walkor

赞同来自:

1、你应该是用了较老的GatewayWorker,老版本status看不到BusinessWorker进程并不是BusinessWorker没了,一般是由于业务代码长时间阻塞导致php start.php status没响应了。通过ps auxf命令能看到BusinessWorker进程还在。 新版本GatewayWorker如果BusinessWorker进程没响应status时仍然可以看到进程,但是状态会是busy。
 
停止的时候有报错可以忽略,因为有些进程正在处理业务,gateway和BusinessWorker之间通讯终端导致一些报错,属于正常情况。
 
2、业务代码执行了一些Gateway::xxx接口时,businessWorker会向Gateway进程发起一些短连接请求,所以会有nonestablished连接,一般都是TIME_WAIT连接,数量不高于net.ipv4.tcp_max_tw_buckets设定的值都属于正常现象,net.ipv4.tcp_max_tw_buckets最好不要超过30000。
 
3、通讯超时应该是由于BusinessWorker进程不响应导致的
 
4、这个具体看业务,比如这时大量请求发来后业务代码处理过程中可能会发起mysql redis http等查询调用,可能会建立mysql redis等新的tcp连接。比如登录信息发来后业务判断登录失败或超时断开连接都有可能造成波动都是正常的。
 
BusinessWorker进程不响应可以通过这里定位 http://doc.workerman.net/debug/busy-process.html
status里消失但是ps auxf能看到的BusinessWorker进程就是busy进程。

dou号

赞同来自:

 

dou号

赞同来自:

非活跃数图

要回复问题请先登录注册