当我使用php artisan brainsocket:start --port=8080
启动套接字服务器时,当用户逐渐增长时,我的内存总是耗尽,套接字服务器将停止。
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 33151019 bytes)
in /alidata/www/wcketbtn/vendor/react/stream/src/Buffer.php on line 118
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException",
"message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 33151019 bytes)",
"file":"\/alidata\/www\/wketbtn\/vendor\/react\/stream\/src\/Buffer.php","line":118}}
随着用户的增长,我使用htop
来检查内存使用情况:
CPU[||||||||||||||||||||||||||||||||||||||||||||||||||||99.3%] Tasks: 64, 57 thr; 2 running
Mem[||||||||||||||||||||||||||||||||||||||||||||||||636/994MB] Load average: 1.00 0.68 0.37
Swp[ 0/0MB] Uptime: 123 days(!), 19:05:51
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
28858 root 20 0 202M 91680 6776 R 97.0 9.0 5:54.93 php artisan brainsocket:start --port=8080
29054 root 20 0 24508 2184 1448 R 1.0 0.2 0:00.06 htop
所以我使用php -d memory_limit=512M artisan brainsocket:start --port=8080
但仍会耗尽内存。
我无法弄清楚哪些代码会逐渐增加我的内存使用量,以及如何限制它或者可能会取消某些内容。我该怎么办?
或者,如何编写可以监视套接字服务器的shell脚本,当它停止时,重新启动它(运行php artisan brainsocket:start --port=8080
)。
答案 0 :(得分:0)
memory_get_usage和memory_get_peak_usage函数是您的朋友。
尝试在PHP脚本的各个其他部分之后将输出保存到某处,您将立即查明问题。
另外,我会检查您的memory_limit=512M
是否真的有效。当你拥有那套时,错误代码是什么样的?它是否仍然说〜134,000,000字节耗尽?