hi 大家好,今天飛測團隊給大家帶來一篇性能測試中java程式cpu耗時分析的技巧,希望對大家有幫助,有疑惑或者錯誤,歡迎交流和指正。
1概述
對java程式進行性能壓測時,經常會出現cpu資源使用高,甚至資源不釋放的情況。對于這類性能問題,可以通過jdk自帶工具jvm去定位到cpu耗時較高的熱點方法,下面就為大家詳細介紹如何使用jvm去定位cpu耗時。
2連接配接jvm
1 開啟jvm遠端配置
通常連接配接方式是本地遠端通路伺服器的java虛拟機。下面以tomcat為例
進入tomat/bin目錄,編輯catalina.sh檔案,找到JAVA_OPTS,加入以下内容:
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=1085 -Dcom.sun.management.jmxremote
2 打開jvm可視化工具進行連接配接
進入jdk/bin目錄,輕按兩下jvisualvm.exe

添加遠端主機ip,點選“确認”
添加jmx連接配接ip:jvm port,點選“确認”。端口為com.sun.management.jmxremote.port=1085
3Jvm cpu耗時分析
進入抽樣器頁簽,點選“CPU”按鈕。Jvm會實時列印耗cpu熱點方法,按照從大到小進行排序
點選“快照”按鈕,生成nps的快照檔案。快照會以線程為機關,将每個線程方法以調用樹的形式展現出來。使用例子作為具體講解:
1. 首先讓調用樹以時間(cpu)倒序排列
2. 找到應用線程(排除系統線程),按照時間一層層遞歸調用,最終找出最耗時的方法。
從下面截圖可以看到,選取排序中第一個應用線程pool-1-thread-2,一層層展開調用數并結合。最後定位到getJedis方法自調用占用cpu時間達到90%,提給開發gg優化即可,是不是很簡單
3. getJedis方法主要進行redis計數操作,每調用一次接口,程式會連接配接redis并做一次+1的邏輯,該方法占用cpu耗時90%。開發需要排查這段代碼是否有性能問題,或者redis配置能否優化
堅持的是分享,搬運的是知識,圖的是大家的進步,沒有收費的教育訓練,沒有虛度的吹水,喜歡就關注、轉發(免費幫助更多夥伴)等來交流,想了解的知識請留言,給你帶來更多價值,是我們期待的方向,有更多興趣的歡迎切磋,我們微信訂閱号,聯系方式如下:
推薦文章