記一次laravel項目因session導致cpu過高的問題

參考:https://www.phpmianshi.com/?id=100

 

問題起因:

 

騰訊雲監控CPU過高報警  10:20-10:28左右持續 百分之80以上。

 

問題排查:

 

1. 查看php-fpm慢日誌發現有大量如下日誌:

[26-May-2020 10:20:36]  [pool www] pid 7368
script_filename = /data/nginx/webroot/simulation-strategy-20200519-203518-1fe2f1
4c/public/index.php
...省略...
[0x00007ffd04de1440] ???() /data/nginx/webroot/simulation-strategy-20200519-2035
18-1fe2f14c/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.p
hp:109
[0x00007f00b421d9e0] gc() /data/nginx/webroot/simulation-strategy-20200519-20351
8-1fe2f14c/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSessi
on.php:134
[0x00007f00b421d900] collectGarbage() /data/nginx/webroot/simulation-strategy-20
200519-203518-1fe2f14c/vendor/laravel/framework/src/Illuminate/Session/Middlewar
e/StartSession.php:61
...省略...

 

2.大概是因爲session gc的時候過慢問題,查看時間分佈

grep -E '26-May-2020|collectGarbage' php-slow.log|grep collectGarbage -B 1 | grep '26-May-2020'
發現CPU過高的時間段和這個報錯非常吻合,持續觀察11:32左右又有幾個報錯,看監控顯示11:32確實有CPU過高的情況,基本確定是這裏的問題

 

問題分析和解決:


查看.env文件裏session的存儲方式設置的是file,打開config/session.php

'lifetime' => 120,
'expire_on_close' => false,

expire_on_close設置爲false,意味着用戶關閉瀏覽器時沒有刪除session,這裏我們改爲true


cd storage/framework/sessions
ls -alh |wc -l

發現有11236條記錄,gc查找文件過慢,刪除所有文件再觀察(切記不能刪除sessions文件夾,否則會出錯)

 

當然最根本的還是要把session存入redis或者mc中最好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章