解决workerman的gateway的崩溃问题 | php 技术论坛-江南app体育官方入口

现象:gateway进程崩溃

pid:5855 worker[10] process terminated with error: e_error "allowed memory size of 134217728 bytes exhausted (tried to allocate 233472 bytes) in /xxx/vendor/workerman/workerman/connection/tcpconnection.php on line 401"

解决思路:

先把gateway进程的内存限制加大

ini_set('memory_limit', '2048m');

用workerman自带的status命令观察哪个进程busy,找到对应的进程pid

strace命令观察繁忙的进程:strace -ttp pid

strace -ttp 22030

strace命令会输出recvfromsendto函数的调用,这两函数的第一个参数就是读取或写入的fd

19:06:34.564427 sendto(3023, "\201~\1\337{\"cmd\":12,\"code\":0,\"data\":\"["..., 483, 0, null, 0) = 483

lsof -npp pid | grep fd命令找到繁忙进程里面具体的fdtcp信息

lsof -npp 22030 | grep 3023

输出如下:

php     22030 deploy 1905u     ipv4           63304556       0t0      tcp xx.xx.xx.5:7272->xx.xx.xx.7:26499 (established)

结论

  1. 根据tcp信息可知,我这个gateway进程在疯狂的往xx.xx.xx.7:26499发送数据。
  2. 按这个思路,可以解决任何进程阻塞的问题。
本作品采用《cc 协议》,转载必须注明作者和本文链接
讨论数量: 6

你应该发到php版块里

1个月前
(楼主) 1个月前

不懂就问,这个 1905 是从哪里拿到的?

lsof -npp 22030 | grep 1905
1个月前
lovewei 1个月前
(楼主) 1个月前

这不是内存暴了吗? 注意用64位系统, 代码写标准点, 大内存对象要实时释放掉.

1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
划水师 @ 未来科技
文章
24
粉丝
8
喜欢
43
收藏
43
排名:919
访问:6653
博客标签
社区赞助商
网站地图