日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jvisualVM调优案例

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvisualVM调优案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,jvisualVM介紹

jvisualVM是一款jdk自帶的圖像化jvm性能監控工具,可以:

  • 實時監控堆內存的變化情況
  • 一鍵生成堆轉儲文件并解析并圖形化展示
  • dump線程信息(相當于jstack)
  • 堆內存profiler(相當于jmap -histo展示堆內對象直方圖)
  • CPU、內存、線程、已加載的類統計

二,實時監控堆內存使用情況

很棒的一點是,這個圖是動態變化的,可以動態的看見堆內存各區域的動態變化:

  • eden區內存占用逐漸增多
  • eden區垃圾回收
  • eden區對象復制到幸存區
  • 幸存區對象復制到老年代
  • full gc
  • ygc的統計數據
  • fgc的統計數據

使用案例:

生產環境服務器處理業務請求變慢,通過jvisualVM發現ygc的次數非常頻繁,沒發生fgc,老年代的空間非常充足,以上現象說明eden區的空間小,但是這臺機器的內存是32G,不至于缺乏內存,從jvisualVM上看,可用的eden區內存高達3G。那為什么會頻繁的ygc呢?

仔細研究發現,雖然eden區的可用內存也即最大可分配內存高達3G,但實際分配給eden區的內存只有150M,難怪ygc那么頻繁。

那為什么只分配給eden區150M內存呢,繼續觀察發現old區的分配內存也沒有想象中的多,但是old區在不斷的動態調整,不斷擴大,eden區的實際分配內存基本沒有變化。

心里大致有底了,檢查了下jvm參數,發現沒有配置-Xms、-Xmx,在沒有明確指定堆內存的大小的情況下,jvm會根據應用所需要的最小堆內存進行內存規劃,導致了eden區過小。

定位到了這個問題,就知道該怎么辦了,顯式配置-Xms8g、-Xmx8g,重啟應用,ygc明顯減少,應用吞吐量大幅增加,一次成功的jvm優化。

這里需要清楚jvisualVM的visual gc界面的使用,visual gc是jvisualVM的插件,要先安裝,安裝極其簡單,通過jvisualVM即可快速完成。

visual gc界面詳解:

關鍵要理解eden可用大小和實際分配大小,如果不通過-Xms、-Xmx明確指定堆空間大小的話,eden可用大小和實際分配大小可能會有很大差距,導致eden區頻繁發生ygc。

三, 一鍵生成堆轉儲文件并解析并圖形化展示

1,生成dump文件

2,自帶解析并可視化

可以通過實例數找到大對象和大集合對象 ,以及通過“與另一個堆轉儲進行比較”確定不同時間點上對象在堆內存的變化情況,結合實際情況根據這些線索進一步確定問題所在。

MAT是更強大的dump文件分析工具,如果說有必須要掌握的圖形化jvm監控工具的話,jvisualVM和MAT是唯二兩款。

后面再分析MAT的使用。

四,dump線程信息(相當于jstack)

1,生成線程信息

2,查看生成的線程相關信息

查看線程狀態及各狀態持續時間。

可惜的是,不能搜索,生成環境幾十上百個線程,不能搜索就代表著雞肋。

案例:定位C3P0連接池滿導致應用阻塞,響應緩慢

thread2一直被阻塞,直接原因是線程池連接數全部被占用,連接池被用完有如下幾個可能:

  • 連接池數設置過少
  • sql執行慢,導致連接長時間被占用
  • 連接使用完成后未被釋放
  • 數據庫異常,如鎖表

解決方案:
1,加大連接池數量;
2,修改代碼,使用完連接后要關閉連接;
3,優化sql,提升sql執行性能;

總結

以上是生活随笔為你收集整理的jvisualVM调优案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。