首页 > 编程语言 > 详细

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

时间:2020-04-17 14:14:35      阅读:112      评论:0      收藏:0      [点我收藏+]

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

以下记录下解决过程:

测试了一个接口结果如下

技术分享图片

接口没有响应

 

先看下应用日志

技术分享图片

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

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

先来个总的:

服务器CPU使用率一直很高,达到100% 定位方法
方法一: 转载:http://www.linuxhot.com/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文件夹下的临时文件后

技术分享图片

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

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

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

原文:https://www.cnblogs.com/timseng/p/12718999.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!