gpt4 book ai didi

php - fgets 中的内存泄漏

转载 作者:搜寻专家 更新时间:2023-10-31 21:43:40 28 4
gpt4 key购买 nike

在为其他一些项目制作简单的 IRC 机器人时,我已经使用 PHP 套接字玩了几天,该机器人已启动并正在运行,但我注意到几个小时后它将耗尽所有可用内存。

我一直在使用 memory_get_usage() 进行一些调试,在确保我将我在循环中使用的所有变量清零之后,唯一导致内存使用量增加的是“fgets()”,我似乎无法弄清楚为什么它在使用后不会释放内存。

对我做错了什么有什么想法吗?

伪代码:

$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;
}

请注意,我已禁用阻止,这样即使在它正在观看的 channel 上没有任何事件时,机器人也可以执行一些后台任务。

调用fgets前后的内存使用情况(与stream_get_line结果相同):

int(959504)
string(0) "" //Data returned from gets
int(967736)

请注意,我正在针对 SSL 服务器进行测试,这可能是某种 SSL“溢出”吗?

或者如果您想自己查看整个代码:https://github.com/Ueland/VikingBot

最佳答案

根据 https://bugs.php.net/bug.php?id=38962这是在特定 php 5.2.6 版本中重现的错误。因此,如果您使用更高版本,您可以报告您的发现:)

关于php - fgets 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7167206/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com