3.x 版本 文件上传时内存泄漏

0

文件上传完内存没有得到释放, 导致一致累计, 最后崩溃自动重启


报错时的泄漏点(位置有点飘忽不定,这附近的代码都有概率报错):
https://github.com/walkor/Workerman/blob/6614873e22d88f7eb761c39afcaf8301b4084283/Protocols/Http.php#L551


尝试了手动释放掉$_cache并没能解决问题


附件为strace信息

已邀请:

damao - phper

赞同来自:

内存报错不一定是内存泄漏吧,可能上传的文件过大超过内存限制。还有可能是同一个进程同时在接收几个用户上传的文件,所有文件加一起导致内存超过限制。


上传完文件,运行 php start.php status 看下内存释放没。

MakeHui

赞同来自:

找到一个曲线救国的方法: https://github.com/walkor/Workerman/issues/401#issuecomment-462043161
稍微优化了一下重启策略


Timer::add(5, function() use ($worker){
$memoryUsage = memory_get_usage(true);
if (count($worker->connections) !== 0 && $memoryUsage < $this->memoryUsageLimit[1]) {
return;
}
if ($memoryUsage > $this->memoryUsageLimit[0] || static::$requestCount > 10000) {
static::$requestCount = 0;
// Restart current process.
Worker::stopAll();
}
});

还有一点要注意: 最好是和前端沟通一下请求时在header中设置Connection: close, 或者服务端调用close()不保持链接, 增加触发的概率

要回复问题请先登录注册