測試環境,內部賬戶登陸以後,測試機負載很是高
java
【jps】:jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一個顯示當前全部java進程pid的命令,簡單實用,很是適合在linux/unix平臺上簡單察看當前java進程的一些簡單狀況。 web
【pidstat】: pidstat主要用於監控所有或指定進程佔用系統資源的狀況,如CPU,內存、設備IO、任務切換、線程等。pidstat首次運行時顯示自系統啓動開始的各項統計信息,以後運行pidstat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。 mongodb
【jstack】:jstack用於打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,若是是在64位機器上,須要指定選項"-J-d64",Windows的jstack使用方式只支持如下的這種方式。 服務器
一、登陸服務器,使用jps查看結果以下:
web@/home/www$ jps
11493 Bootstrap
13022 Jpstcp
二、使用pidstat查看查看結果以下:
web@/home/www$ pidstat -p 11493 -u 1 3 -t
Linux 2.6.32-5-amd64 (debian-mongodb-test01) 2014年04月03日 x86_64 (2 CPU)ide
13時09分09秒 TGID TID %usr %system %guest %CPU CPU Command
13時09分10秒 11493 - 194.39 2.80 0.00 197.20 1 java
13時09分10秒 - 11493 0.00 0.00 0.00 0.00 1 |__java
13時09分10秒 - 11494 0.00 0.00 0.00 0.00 1 |__java
13時09分10秒 - 11495 7.48 1.87 0.00 9.35 1 |__java
13時09分10秒 - 11496 9.35 0.00 0.00 9.35 0 |__java
13時09分10秒 - 11497 0.00 0.00 0.00 0.00 0 |__java
...中間忽略
平均時間: - 11669 78.66 0.33 0.00 28.99 - |__java
平均時間: - 11670 88.66 0.33 0.00 28.99 - |__java工具
問題鎖定:TID=11669|11670的java測試
三、導出Java應用程序全部線程
jstack -l 11493 > /home/www/tmp.txt
TID=11670的java,11670轉換爲16進制是0x2d96
在tmp.txt中查找nid=0x2d96線程
如圖
鎖定了:
BusinessSubscriptionService.getBusinessSusbscriptions(BusinessSubscriptionService.java:65)
BusinessSubscriptionService.getBusinessSusbscriptionsOfLoginUser(BusinessSubscriptionService.java:175)
詢問開發檢查問題所在。
結果開發反饋:
重構有風險,測試需謹慎。 這個錯誤的重構會致使進入帶寬查詢加載業務訂閱時,錯誤的查詢了當前內部賬號綁定的全部帳戶(多達4000多個)的業務訂閱,所以致使CPU負載高,tcp鏈接數高,頁面一直在等待響應。