一、背景
互聯網發展的今天,很多問題都會在生產中遇到,假如某天發現系統資源中cpu占用100%,一直居高不下,那麼就要進行問題查詢了。
二、解決思路
1、查看那個java進程占用最多,top命令
[root@iZ25fdlnov1Z test]# top -H
2、可以明顯看到PID為29003的java進程占用cup最高,已占用了95.5%了,可根據進程號進一步查看該進程的線程情況。顯示該進程中每個線程的CPU資源消耗情況。
[root@QW121 test]# top -H -p 29003
3、找到占用最高的PID29003後,用jstack打印線程棧信息到stack文件中,如下圖:
[root@iZ25fdlnov1Z atm]# jstack -l -F 29003 >29003.stack
此時,已經將線程棧信息打印進29003.stack文件中了,可以利用cat等命令查看該文件。
4、找到29003的前後20行信息(20行不夠可以50行或者更多),並展示出來:
[root@iZ123 test]# cat 29003.stack |grep -A 20 '29003'
如上圖所示,可准確定位到具體哪個類中的那個方法導致的該問題的出現,然後根據代碼再一一解決。