使用laravel brainsocket时内存耗尽

时间:2015-06-06 01:51:04

标签: php sockets laravel websocket

当我使用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)。

1 个答案:

答案 0 :(得分:0)

memory_get_usagememory_get_peak_usage函数是您的朋友。

尝试在PHP脚本的各个其他部分之后将输出保存到某处,您将立即查明问题。

另外,我会检查您的memory_limit=512M是否真的有效。当你拥有那套时,错误代码是什么样的?它是否仍然说〜134,000,000字节耗尽?