葛胖胖的小草屋 一言不合 rm -fr /

php-fpm启动失败,提示:No space left on device

2019-11-25
cossete

阅读:

PHP

出现的问题

php-fpm停止运行,重启的时候提示unable to bind listening socket for address '/tmp/php-cgi-73.sock': No space left on device (28)

排查过程

  1. 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

//这里空间还有很多剩余
  1. 经过各种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

  1. 查找发现 /tmp 目录下有很多sess_xxxxx的 session临时文件。
ls -lt /tmp | wc -l
  1. 删除session临时文件
sudo find /tmp -type f -exec rm {} \; //此过程处理时间较长,耐心等待...

如果使用rm *,有可能因为文件数量太多而出现Argument list too long错误,关于Argument list too long错误可以参考《linux Argument list too long错误解决方法》

  1. 除了/tmp的临时文件外,0字节的文件也会占用inode,应该也释放。

遍历寻找0字节的文件,并删除。

sudo find /home -type f -size 0 -exec rm {} \;
  1. 查看结果
➜  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临时文件删除后,用户登录后立马退出登录,重复多次登录还是立马退出

如何解决

  1. 清理浏览器缓存
  2. 刷新CDN
  3. 若使用反向代理proxy并添加缓存的,清理代理缓存

假设登录地址为http://xxx.com/login.html,将地址修改为http://xxx.com/login或http://xxx.com/login.html?_t=123 后能正常登录则一定是缓存的问题

问题反思

为什么会出现如此多的session临时文件,还望大牛帮解答,可以邮箱我(gnpok@qq.com)


Comments

Content