阿里云

linux服务器tmp目录爆满并产生大量sess_*文件

近期公司网站全面版本升级,使用thinkphp5.1版本为基础,进行了二次开发,在全面更新后,网站链接暴涨增值98万,运行一周未出现什么问题,但是在下一周,忽然程序出现大面积404页面,查看日志及错误信息,发现是linux服务器tmp目录爆满,导致mysql无法写入,程序崩盘。


通过观察tmp目录文件,发现目录内产生了大量的sess_开发的文件,数量达到了200万之多,并且每个文件都是0kb,但是每一个文件占用的空间却不是0,0kb只是文件的大小,图例如下:


image.png

sess_*等文件是session存储文件,默认存储位置为linux缓存目录。


首先,我们在php.ini中找到session.savepath = '/tmp'; 可以通过savepath关键字进行查找,可能是不同目录或注释状态,我们将其改为使用状态(去掉前面的   ;   ),并修改保存位置,将其改为tmp目录之外,这样确保tmp目录不至于写满。新建目标目录,如sessionTmp,修改配置文件,session.savepath = '/sessionTmp';   修改后需重启php环境。


关于tmp目录下已经产生的文件如何进行删除,不建议直接对tmp目录直接删除,提供如下删除方式:


1、对于数量不大的,不超过1万的,使用

rm -r sess_*

   命令删除,使用此命令需要进入到tmp目录下。


2、对于数量不大的,不超过1万的,使用

rm -rf /tmp/sess_*

命令删除,使用此命令不需要进入到tmp目录下。


3、对于超过100万,如果仍使用上面的两种命令,出现报错为too long ,表示数列太长,无法操作,使用

find . -name "sess_*" |xargs rm -r

命令删除,耗时和数量成正比,使用此命令需要进入到tmp目录下。


以上解决方式暂时只能处理tmp目录爆满问题,对于session文件的出现暂时无法确定终极原因,有待观察发现!

喜欢就点个赞吧