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

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

以下记录下解决过程:

测试了一个接口结果如下

188295959_1_20200417010804916.png

接口没有响应

先看下应用日志

188295959_2_20200417010805510.png

日志使用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占用高进程的线程栈

188295959_3_20200417010806932.png

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

188295959_4_20200417010807307.png

打印线程的堆栈信息

188295959_5_20200417010807541.png

没有异常???

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

188295959_6_20200417010807854.png

188295959_7_2020041701080888.png

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

188295959_8_20200417010808369.png

果然,满了

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

188295959_9_20200417010808760.png

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

188295959_10_2020041701080973.png

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

188295959_11_20200417010810463.png

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值