当前位置:首页 > 运维 > 正文内容

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

phpmianshi1年前 (2020-05-26)运维644

问题起因:


腾讯云监控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中最好。

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

linux中如何查看系统io使用情况

linux中查看IO的方法主要有下面几种方法:1. top   %wa    的含义是等待输入输出的CPU时间百分比,这个数字越高说明越多的CPU资源...

内存分配堆与栈的区别

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:(1)程序内存布局场景下,堆与栈表...

Nginx中对同一IP限速限流DDOS预防

作用:Nginx通过limit_conn_zone和limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击limit_conn_zone是限制同一个IP的连接数...

linux中set指令用法

简介我们知道,Bash 执行脚本的时候,会创建一个新的 Shell,这个 Shell 就是脚本的执行环境,Bash 默认给定了这个环境的各种参数。set命令用来修改 Shell 环境的运行参数,也...

快速删除复制代码中的行号

有时我们copy的代码中前面有行号,一个一个删除太麻烦可以用下面三种方式删除行号:1.awk操作 awk '{for(i=2;i<=NF;i++)printf(&qu...

Nginx中last和break redirect和permanent区别和联系

一.last & break    (1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异。注意一点就是,他们会跳过所有的在他们之...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。