分享

记一次springboot 故障:接口无响应--》CPU 100%---》log无法写入---》磁盘满了

 印度阿三17 2020-04-17

早上突然有小伙伴说系统无法访问,

以下记录下解决过程:

测试了一个接口结果如下

接口没有响应

 

先看下应用日志

日志使用tail -f 不会自己追加,用htop看到系统两个核都100%,看到是应用占用的

接下了分析下Java程序怎么占用的

先来个总的:

服务器CPU使用率一直很高,达到100% 定位方法
方法一: 转载:http://www./java-cpu-used-high.html 1.jps 获取Java进程的PID。 2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。 3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。 4.echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写。 5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。 6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。 方法二: 1.使用top 定位到占用CPU高的进程PID top 通过ps aux | grep PID命令 2.获取线程信息,并找到占用CPU高的线程 ps -mp pid -o THREAD,tid,time | sort -rn 3.将需要的线程ID转换为16进制格式 printf "%x\n" tid 4.打印线程的堆栈信息 jstack pid |grep tid -A 30 方法3: 1.确认占用过高的进程 ps -ef|grep mem-* 查看进程的pid top -Hp PID 查看某进程PID的 jstack -l 21113 查看线程的堆栈

 具体操作

jps 获取Java进程的PID。

 8783

jstack pid >> java.txt 导出CPU占用高进程的线程栈

使用jstack 打印上面查到的java pid 中的线程

打印线程的堆栈信息

没有异常???

再去看下log,指定最后100行

哇哦,log写入停止前报了一个日志写入错误,日志写不进去,估计是磁盘的问题

果然,满了

看下谁占了,并依次往里看

删除占空间的应用日志后,发现/a**的分区磁盘容量回来了,但是根目录还是99%,从du -sh /*结果来看,/tmp占用的较多,看下/tmp挂载点是否和/在同一个分区上:df -h /tmp 结果如下

清除/tmp文件夹下的临时文件后

好了,重启下应用,正常了

我的天,原来绕这么一大圈只是磁盘问题,从查看应用日志发现日志不会追加就应该看出端倪了。。。

来源:https://www./content-4-677901.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多