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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题

發布時間:2025/3/21 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

本文介紹一次解決現場java內存泄漏問題的經過,希望能提供后續遇到類似情況的讀者一點思路。

生產環境發現的問題問題

生產環境運維人員反饋,服務器(windows系統)卡死,相關的服務都運行異常,重啟之后也沒作用。通過運行管理器看到java進程內存占用5G,初步判斷是程序內存泄漏。

基本解決方案

基本解決方案是先收集生產環境的jvm內存使用信息,線程信息,再利用工具進行進一步分析。

解決過程

1、收集jvm內存信息,線程信息

生產環境的操作系統是windows,機器需要先設置好JAVA_HOME環境變量。下面以java進程PID為12140,輸出文件路徑保存在C:\jvmtest 文件夾中為例。

1.1、收集內存使用基本情況統計

使用命令行命令:jmap -heap 12140 > C:\jvmtest\jmapheap

直接打開查看C:\jvmtest文件夾下面的jampheap文件,里面包含內存使用情況基本統計,可以確認問題原因不是jvm參數內存分配過小。

可以看到java堆內存基本已經用完。

內存使用情況基本統計.png

1.2、收集所有java線程運行信息

使用命令行命令:jstack 12140 > C:\jvmtest\jstack

直接打開查看C:\jvmtest文件夾下面的jstack文件,里面包含所有java線程運行信息:

所有java線程運行信息

1.3、收集java內存詳細使用信息

使用命令行命令:jmap -dump:format=b,file=C:\jvmtest\jmap_dump_all 12140

得到C:\jvmtest文件夾下面的jmap_dump_all文件,該內存dump文件有5G大小,二進制文件,不可直接查看,需要用工具查看。

2、基于工具分析

2.1、工具選擇

如果dump文件比較小,推薦直接使用jdk自帶的jvisiualvm工具進行打開,但是如果dump文件比較大,親測jvisiualvm打開失敗,這時推薦選擇eclipse的內存分析工具:eclipse memory analyer(mat)

2.2、eclipse memory analye軟件配置

這里選擇從eclipse官網下載MemoryAnalyzer-1.7.0.20170613-win32.win32.x86_64.zip文件(也可以下載eclipse插件),由于dump文件比較大,打開分析工具前需要修改eclipse memory analyer的內存配置:

配置.png

配置.png

最后一行修改為需要的內存大小

如果dump文件比較大的情況下,如果分析工具運行的環境機器內存太小是打不開的,機器可用內存至少要比dump文件大。

2.2、查看分析情況

打開eclipse memory analye軟件,載入dump文件,看到以下信息:

overlook.png

線程內存使用情況.png

2.3、問題定位

基于eclipse memory analye軟件,可用定位到有1條線程名為pool-4-thread-1的線程,里面有一個ArrayList的對象,這個list對象保存了一系列的HashMap對象,總共有4G。

搜索 1.2步驟介紹的所有java線程信息的文件,可以得到pool-4-thread-1線程運行狀態如下:基于此可以定位到有問題的代碼。

image.png

2.4、問題原因定位

檢查代碼的時候發現,程序有一個模塊,功能是從數據庫定時查詢數據然后數據做處理,模塊中把查出來的數據基于log4j寫到日志中,實際現場環境有時候定時查詢得到的數據有幾百兆,打印到日志文件中打印不過來。導致數據在內存中不斷積壓等待被打印,內存得不到釋放。

總結

本次使用了JVM性能調優監控工具jstack、jamp,相關工具還有jstack、jmap、jhat、jstat,這些工具對于內存溢出,CPU飆升,線程死鎖、等問題解決非常有幫助。

總結

以上是生活随笔為你收集整理的jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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