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"
?
求大佬看下這是內(nèi)存溢出導(dǎo)致的么?
有什么辦法解決么?
[attach]2042[/attach]
[attach]2043[/attach]
?
TcpConnection.php發(fā)生內(nèi)存報(bào)錯(cuò)應(yīng)該是快速給所有客戶端發(fā)送大數(shù)據(jù)導(dǎo)致的,看報(bào)錯(cuò) tried to allocate 1441792 bytes
一個(gè)連接嘗試申請(qǐng) 1M+的內(nèi)存。如果快速地給很多客戶端推送數(shù)據(jù),客戶端又無(wú)法接收或無(wú)法及時(shí)接收(例如客戶端沒(méi)有接收,或切到后臺(tái)無(wú)法接收、服務(wù)器帶寬不夠等),這些數(shù)據(jù)都會(huì)積壓在內(nèi)存,導(dǎo)致內(nèi)存使用升高到php.ini設(shè)置的極限值報(bào)錯(cuò)。
想象下給200連接同時(shí)推送1M的數(shù)據(jù),服務(wù)器瞬間帶寬需要1G+,如果服務(wù)器帶寬沒(méi)有這么大就會(huì)堆積在內(nèi)存,可能產(chǎn)生報(bào)錯(cuò)。
解決辦法優(yōu)化業(yè)務(wù)不要發(fā)大數(shù)據(jù)或者不要一直無(wú)限制發(fā)送數(shù)據(jù),加大內(nèi)存,加大帶寬等。
當(dāng)然如果內(nèi)存報(bào)錯(cuò)不是發(fā)生在TcpConnection.php,可能是有其它問(wèn)題。
大佬,爆內(nèi)存進(jìn)程退出后,占用的內(nèi)存釋放嗎?服務(wù)器的16G的,開(kāi)著守護(hù)進(jìn)程時(shí)間長(zhǎng)了都跑滿了,wokerman重啟也是這樣的,內(nèi)存就是一直累積,好多php進(jìn)程,一直達(dá)到最大進(jìn)程數(shù),一個(gè)php進(jìn)程最大都400+m..小白不怎么懂,大佬不嫌棄再回復(fù)下,不勝感激