天天看點

Windows下Tomcat記憶體占用過高問題跟蹤(jmap 的使用)

一、問題描述

  Tomcat下面部署很多個java項目的war包,tomcat啟動一段時間後,發現cpu占用過高,整個界面卡死!

二、通過tasklist指令檢視java程序下的線程

三、通過jstack把程序下是以的Java線程棧的内容列印出文本中

四、引出jmap

使用jstack我們能夠生成虛拟機目前時刻的線程快照,包含虛拟機中每一個線程正在執行的方法堆棧的集合,用于定位線程出現長時間停頓的原因,如死鎖、死循環、外部資源長時間等待等。但是有時候我們需要觀察到記憶體對象執行個體,此時我們可以使用jmap指令。

四、jmap的作用

Jmap 可以用來檢視記憶體資訊,執行個體個數以及占用記憶體大小.

jmap -histo[:live] 列印每個class的執行個體數目,記憶體占用,類全名資訊. VM的内部類名字開頭會加上字首”*”. 如果子參數加上live後,隻統計活的對象數量.

五、jmap的使用

1、堆記憶體dump到指定目錄,jmap -dump:b,file=project.hprof pid

2、dump生成的檔案可以用jvisualvm指令工具導入該dump檔案分析: 打開 jdk 的bin目錄的 jvisualvm 工具,選擇檔案,再選擇裝入,并選中對應的檔案類型,即可進行導入檔案,分析記憶體對象。