出现的问题
php-fpm停止运行,重启的时候提示
unable to bind listening socket for address '/tmp/php-cgi-73.sock': No space left on device (28)
排查过程
No space left on device
字面上解释为空间不足
➜ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 20K 7.8G 1% /dev/shm
tmpfs 7.8G 588K 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/vda1 40G 3.0G 35G 8% /
tmpfs 1.6G 0 1.6G 0% /run/user/1003
/dev/vdb1 25G 6.7G 17G 29% /www
//这里空间还有很多剩余
- 经过各种baidu,终于找到了解决问题的方法。点击查看原文
可以排除空间已满的情况。导致文件生成失败还有另一个原因,就是文件索引节点inode已满
➜ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 2030611 366 2030245 1% /dev
tmpfs 2033204 2 2033202 1% /dev/shm
tmpfs 2033204 474 2032730 1% /run
tmpfs 2033204 16 2033188 1% /sys/fs/cgroup
/dev/vda1 2621440 2621440 0 100%/
tmpfs 2033204 1 2033203 1% /run/user/1003
/dev/vdb1 1638400 92829 1545571 6% /www
//可以看到根目录下文件节点使用已满
解决方法
删除无用的临时文件,释放inode
- 查找发现 /tmp 目录下有很多sess_xxxxx的 session临时文件。
ls -lt /tmp | wc -l
- 删除session临时文件
sudo find /tmp -type f -exec rm {} \; //此过程处理时间较长,耐心等待...
如果使用rm *,有可能因为文件数量太多而出现Argument list too long错误,关于Argument list too long错误可以参考《linux Argument list too long错误解决方法》
- 除了/tmp的临时文件外,0字节的文件也会占用inode,应该也释放。
遍历寻找0字节的文件,并删除。
sudo find /home -type f -size 0 -exec rm {} \;
- 查看结果
➜ log df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 2030611 366 2030245 1% /dev
tmpfs 2033204 2 2033202 1% /dev/shm
tmpfs 2033204 474 2032730 1% /run
tmpfs 2033204 16 2033188 1% /sys/fs/cgroup
/dev/vda1 2621440 107466 2513974 5% /
tmpfs 2033204 1 2033203 1% /run/user/1003
/dev/vdb1 1638400 92835 1545565 6% /www
恢复正常了,php-fpm可以正常运行了,但你以为就这么结束了吗?
删除session临时文件带来的问题
出现的问题
session临时文件删除后,用户登录后立马退出登录,重复多次登录还是立马退出
如何解决
- 清理浏览器缓存
- 刷新CDN
- 若使用反向代理proxy并添加缓存的,清理代理缓存
假设登录地址为http://xxx.com/login.html,将地址修改为http://xxx.com/login或http://xxx.com/login.html?_t=123 后能正常登录则一定是缓存的问题
问题反思
为什么会出现如此多的session临时文件,还望大牛帮解答,可以邮箱我(gnpok@qq.com)