zoukankan      html  css  js  c++  java
  • 记一次springboot 故障:接口无响应--》CPU 100%---》log无法写入---》磁盘满了

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

    以下记录下解决过程:

    测试了一个接口结果如下

    接口没有响应

    先看下应用日志

    日志使用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 " 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文件夹下的临时文件后

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

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

  • 相关阅读:
    Git命令家底儿及Git数据通信原理详解
    git SSH keys
    TRIM函数
    c# List AddRange
    vtk第一个程序
    MFC CStatic类动态创建
    前端基础之BOM和DOM
    JavaScript
    前端CSS属性相关
    前端CSS
  • 原文地址:https://www.cnblogs.com/timseng/p/12718999.html
Copyright © 2011-2022 走看看