Java进程占用CPU资源过多分析
問題描述:
生產環境下的某臺tomcat7服務器,在剛發布時的時候一切都很正常,在運行一段時間后就出現CPU占用很高的問題,基本上是負載一天比一天高。
問題分析:
1,程序屬于CPU密集型,和開發溝通過,排除此類情況。
2,程序代碼有問題,出現死循環,可能性極大。
問題解決:
1,開發那邊無法排查代碼某個模塊有問題,從日志上也無法分析得出。
2,記得原來通過strace跟蹤的方法解決了一臺PHP服務器CPU占用高的問題,但是通過這種方法無效,經過google搜索,發現可以通過下面的方法進行解決,那就嘗試下吧。
解決過程:
1,根據top命令,發現PID為2633的Java進程占用CPU高達300%,出現故障。
2,找到該進程后,如何定位具體線程或代碼呢,首先顯示線程列表,并按照CPU占用高的線程排序:
[root@localhost logs]# ps -mp 190102633 -o THREAD,tid,time | sort -rn
顯示結果如下:
USER???? %CPU PRI SCNT WCHAN? USER SYSTEM?? TID???? TIME
root???? 10.5? 19??? - -???????? -????? -? 190103626 00:12:48
root???? 10.1? 19??? - -???????? -????? -? 190103593 00:12:16
找到了耗時最高的線程190123626,占用CPU時間有12分鐘了!
將需要的線程ID轉換為16進制格式:
[root@localhost logs]# printf "%x\n" 3626
e18
最后打印線程的堆棧信息:
[root@localhost logs]# jstack 2633 |grep 4a44e18 -A 30
將輸出的信息發給開發部進行確認,這樣就能找出有問題的代碼。
http://blog.chinaunix.net/uid-10449864-id-3463151.html
轉載于:https://www.cnblogs.com/Viguss/p/4533566.html
總結
以上是生活随笔為你收集整理的Java进程占用CPU资源过多分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发美丽女人卡收费项目有哪些?看过后都觉
- 下一篇: Spring 基于Java的Bean声明