国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

3.x 版本 文件上傳時內(nèi)存泄漏

MakeHui

文件上傳完內(nèi)存沒有得到釋放, 導(dǎo)致一致累計, 最后崩潰自動重啟

報錯時的泄漏點(位置有點飄忽不定,這附近的代碼都有概率報錯):
https://github.com/walkor/Workerman/blob/6614873e22d88f7eb761c39afcaf8301b4084283/Protocols/Http.php#L551

嘗試了手動釋放掉$_cache并沒能解決問題

附件為strace信息

2887 2 0
2個回答

damao

內(nèi)存報錯不一定是內(nèi)存泄漏吧,可能上傳的文件過大超過內(nèi)存限制。還有可能是同一個進(jìn)程同時在接收幾個用戶上傳的文件,所有文件加一起導(dǎo)致內(nèi)存超過限制。

上傳完文件,運行 php start.php status 看下內(nèi)存釋放沒。

  • MakeHui 2021-06-10
    1. 上傳文件為 100k; 2. 只有一個進(jìn)程上傳; 3. 我是通過 top 查看的內(nèi)存變化情況, 每次上傳完(可以上傳成功)內(nèi)存都會增加, 即便是等待一段時間內(nèi)存也沒有被回收掉.
MakeHui

找到一個曲線救國的方法: https://github.com/walkor/Workerman/issues/401#issuecomment-462043161
稍微優(yōu)化了一下重啟策略

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中設(shè)置Connection: close, 或者服務(wù)端調(diào)用close()不保持鏈接, 增加觸發(fā)的概率

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??