天天看點

Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 2147483648 bytes

Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 2147483648 bytes

最近生産環境上出現了記憶體溢出的問題,由于項目中操作表格的地方超級多,是以一時半會沒有辦法定位到是哪出的代碼引起的記憶體溢出。

[2023-02-02 12:16:22] lumen.ERROR: Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in /data/api/deploy/api-739-20230116165840/vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet.php:1219

觀察伺服器記憶體使用情況,某核某一程序,将cpu使用率達到100%, 記憶體使用将近2G左右。

Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 2147483648 bytes

使用ps_aux | grep 4752  檢視程序, 程序中執行的是這個任務

/usr/local/php/bin/php /data/api/wwwroot/artisan queue:work --queue=default,more_long redis --sleep=3 --tries=3 --daemon

查詢第一次出現這個報錯的地方,發生時間點是在 2023-01-17 15:50:02

Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 2147483648 bytes

然後找這個時間點之前的排程任務,發現在這個時間點附近有一條耗時隊列執行失敗。

Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 2147483648 bytes

根據日志查詢到這個時間,商品營運操作人員,導入excel 表格中格式有問題,沒有去除空白字元

phpExcel 類在讀取表格檔案的時候,出現了記憶體溢出的情況。

最後在生産上将這個排程任務強制關閉,才将問題解決。