系統(tǒng)影響慢或可能無法訪問,服務(wù)器上發(fā)現(xiàn)swap占用很高,負(fù)載和cpu通過zabbix監(jiān)控看比代碼升級前都要高.
因服務(wù)器核數(shù)少,仔細(xì)觀察有一個cpu利用率一直是100%或90%+上。
以前這類問題也遇到過,網(wǎng)上也有類似解決方法,這里自己做個筆記總結(jié)下。
首先不要著急重啟服務(wù),可以先切換到備用機(jī)器上(生產(chǎn)環(huán)境避免單機(jī)),保留問題現(xiàn)場查找原因。
top查看CPU情況

1)jps -m 非常方便直接定位所有的Java進(jìn)程pid
2)jstack -l pid > jstack.log命令打印棧信息,如果因某些原因無法成功打印,
可以使用kill -3 pid,輸出到j(luò)vm日志中【resin服務(wù)器默認(rèn)輸出到j(luò)vm-default.log日志中】
3)查找占用CPU資源最高的進(jìn)程id,使用top -H -p pid 查看進(jìn)程pid的所有的線程,默認(rèn)是按照%CPU高~低排序。
或者直接使用top查看, shift+H顯示所有的線程,默認(rèn)按照%CPU高~低排序。
找到占用CPU利用率最高的pid,一般CPU利用率達(dá)到90%以上,將pid轉(zhuǎn)換為16進(jìn)制【 linux自帶python,命令:hex(pid)】
4)根據(jù)轉(zhuǎn)換的16進(jìn)制去jstack.log日志中查找基本能定位到具體哪行代碼的問題。
"reportThirdException" daemon prio=10 tid=0x00007f8bd450b800 nid=0x12c4 runnable [0x00007f8b906ac000]
java.lang.Thread.State: RUNNABLE
at com.xxx.interfaces.util.NoticeMonitorSysHelper$ThreadStatue$1.run(NoticeMonitorSysHelper.java:167)
at java.lang.Thread.run(Thread.java:722)
posted on 2016-11-04 23:44
David1228 閱讀(2297)
評論(0) 編輯 收藏 所屬分類:
JAVA 、
J2EE