系统出现异常
我们团队的阿里云服务器在前几天运行过程中,服务器CPU负载长时间达到100%,并且不能通过ssh连接服务器。
经过重启服务器后对服务器进行连接,发现
- 服务器上的crontab不能正常运行
- php-fpm服务不能正常开启
crontab的报错提示为
正在启动 crond:crond: can’t open or create /var/run/crond.pid: 设备上没有空间
php-fpm的报错提示为
Fatal Error Unable to create lock file: Bad file descriptor (9)
问题排查
磁盘空间
由于crontab的反馈是没有空间,于是开始对服务器的磁盘空间进行检查
[root@********** ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 13G 6.5G 66% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
发现磁盘空间是够用的。
inode
[root@****** ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 1310720 1306882 3838 100% /
tmpfs 490143 1 490142 1% /dev/shm
发现磁盘上的inode空间被全部耗尽
分析问题
出现inode被耗尽的原因主要是大量的碎片文件和小文件占用的inode的使用。
Linux上的inode的原理文章很多,不再赘述。
解决方法
根据和阿里云售后工程师的沟通,解决inode用满的方式有下面几种
- 排查清理服务器内无效文件、碎片文件,垃圾文件。
- 转移非在用的数据到数据盘或本地存档。
- 考虑通过自定义镜像来更换系统时扩容来增加iNode容量。
解决实践
这里采用了第三种方式
经过系统盘的扩容,系统盘从原来的20G扩充为40G,同时inode的容量也变成了原来的两倍。
[root@********** ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 2621440 1311396 1310044 51% /
tmpfs 490143 1 490142 1% /dev/shm
[root@********* ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 40G 13G 25G 33% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
参考资料
- https://help.aliyun.com/knowledge_detail/6698911.html
- https://help.aliyun.com/knowledge_detail/6526698.html
- https://help.aliyun.com/knowledge_detail/5989696.html?spm=5176.789005859.2.20.dD3r1r
- http://www.ruanyifeng.com/blog/2011/12/inode.html
后记
技术人员的需要经历一款产品的调研、开发、部署、迭代,这样才能够得到全面的成长。