记一次laravel项目因session导致cpu过高的问题

65 篇文章 1 订阅
42 篇文章 0 订阅

参考: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中最好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值