本文最后更新于 110 天前,其中的信息可能已经有所发展或是发生改变
前沿
临近国庆假期,提前预防问题,为了过好一个假期,今天查看监控发现有一台老古董项目服务器资源使用有异常,如下:
排查
发现cpu和内存都在30天内突增,这台服务器已经运行2年多。看到这个资源折线图就知道,事出反常必有妖😅。
进入服务器top查看,按 Shift + M 键,对 top 命令的输出按照内存使用情况进行排序。发现如下结果
发现都是JAVA进程,查找了一遍无发现异常。先查看下日志。
发现并没有最近的日志,蹊跷!最后决定重启一下项目(老古董项目,stop掉也没客户反馈)
懵逼,错误
Cannot allocate memory
内存不足没办法执行shutdown.sh,那就直接kill掉它。然后再start
启动报错:No space left on device,查看磁盘空间发现资源空间还是很宽裕的,继续懵逼。
继续排查。即使有可用的磁盘空间,系统可能已经用尽了 inodes,这会导致无法创建新的文件。所以查看系统inodes使用。
果然。inodes使用完与存储空间使用完相似,都是创建不了文件或无法正常执行一些命令。inodes使用完,存储空间可能还有,这种情况一般是生成了大量的小文件,把inode table占满。
一般情况下存储空间使用完,inodes往往才使用百分之几,所以容易忽视对inodes使用情况的监控。
inodes耗尽解决
查看文件最多的目录
for i in /*; do echo $i; find $i | wc -l; done
发现是data目录,继续搜索查看。
发现是xxl-job,猜测肯定开发写的执行一次生成一个文件。去job查看对应执行时间
10秒执行一次,运行了那么长时间了,挖坑来了
解决办法删除文件
find 目录 -type f -mtime +30 | xargs -n 1000 rm -f**
然后再次尝试启动
启动成功,监控资源恢复正常。