記一次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\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文件夾下的臨時文件后

好了,重啟下應用,正常了

我的天,原來繞這么一大圈只是磁盤問題,從查看應用日志發現日志不會追加就應該看出端倪了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM