我爲一些其他項目製作簡單的IRC bot時,一直在玩PHP socket,但是我注意到在幾個小時後它會吃掉所有內存可用。fgets中的內存泄漏
我一直在使用memory_get_usage()進行一些調試,並確保我清空了我在循環中使用的所有變量後,導致內存使用增加的唯一原因是「fgets()」,而且我無法似乎弄清楚爲什麼它不會在使用它之後釋放它的內存。
任何想法,我一直在做什麼錯?
Psudo代碼:
$this->socket = stream_socket_client(server, port);
stream_set_blocking($this->socket, 0);
stream_set_timeout($this->socket, 600);
while(true) {
usleep(500000);
$data = fgets($this->socket, 8192);
*work with data if strlen > 0*
$data = null;
}
請注意,我有殘疾阻塞,這樣,當有上是看的頻道沒有活動的機器人可以做一些後臺任務均勻。
內存使用之前,並呼籲與fgets(相同的結果與stream_get_line)後:
int(959504)
string(0) "" //Data returned from gets
int(967736)
請注意,我針對SSL服務器的測試,這會是某種SSL「溢出」的?
或者,如果你想看看整個代碼自己:https://github.com/Ueland/VikingBot
不希望flock()在鎖定時被阻止 – Jason