GatewayWorker Worker进程内存溢出

黑老怪

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 1441792 bytes) in /www/wwwroot/s-route/vendor/workerman/workerman/Connection/TcpConnection.php on line 372

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1441792 bytes) in /www/wwwroot/s-route/vendor/workerman/workerman/Connection/TcpConnection.php on line 372
Worker process terminated with ERROR: E_ERROR "Allowed memory size of 134217728 bytes exhausted (tried to allocate 1441792 bytes) in /www/wwwroot/s-route/vendor/workerman/workerman/Connection/TcpConnection.php on line 372"
 
求大佬看下这是内存溢出导致的么?
有什么办法解决么?
[attach]2042[/attach]

[attach]2043[/attach]
 

4058 3 0
3个回答

jy123

我也是同样的问题,希望大佬指点

  • xiongxiong 2022-03-04

    内存分配调大点看看 php.ini文件 memory_limit

  • jy123 2022-03-04

    没用,内存一直累加,不知道是啥原因

  • xiongxiong 2022-03-04

    你分配的才128M 设置大点还没用么

jy123

还有作者大大,加qq群一直没人通过

walkor

TcpConnection.php发生内存报错应该是快速给所有客户端发送大数据导致的,看报错 tried to allocate 1441792 bytes 一个连接尝试申请 1M+的内存。如果快速地给很多客户端推送数据,客户端又无法接收或无法及时接收(例如客户端没有接收,或切到后台无法接收、服务器带宽不够等),这些数据都会积压在内存,导致内存使用升高到php.ini设置的极限值报错。

想象下给200连接同时推送1M的数据,服务器瞬间带宽需要1G+,如果服务器带宽没有这么大就会堆积在内存,可能产生报错。

解决办法优化业务不要发大数据或者不要一直无限制发送数据,加大内存,加大带宽等。

当然如果内存报错不是发生在TcpConnection.php,可能是有其它问题。

  • chen 2022-03-04

    学习了

  • jy123 2022-03-04

    谢谢大佬回复

  • jy123 2022-03-04

    大佬,爆内存进程退出后,占用的内存释放吗?服务器的16G的,开着守护进程时间长了都跑满了,wokerman重启也是这样的,内存就是一直累积,好多php进程,一直达到最大进程数,一个php进程最大都400+m..小白不怎么懂,大佬不嫌弃再回复下,不胜感激

  • walkor 2022-03-04

    进程退出后内存会释放

年代过于久远,无法发表回答
🔝