新聞中心
每次我懷疑有內(nèi)存泄漏時,我都要翻箱倒柜找這些命令。所以,這里總結(jié)一下以備后用:

在通州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、成都網(wǎng)站制作 網(wǎng)站設(shè)計制作按需制作網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,通州網(wǎng)站建設(shè)費用合理。
首先,我用下面的命令監(jiān)視進程:
- while ( sleep 1 ) ; do ps -p $PID -o %cpu,%mem,rss ; done
(如果有的話還有New Relic)
如果你看到內(nèi)存上升很快,可能是因為虛擬機設(shè)置。如果你沒有明確指定JVM的內(nèi)存設(shè)置,它將設(shè)置默認(rèn)值給他們。要獲得默認(rèn)值,使用以下命令:
- java -XX:+PrintFlagsFinal -version | grep -i HeapSize
如果這些都不符合你所希望的,那么你就需要指定JVM的內(nèi)存設(shè)置。可以用下面的命令設(shè)置最小和***堆大?。?/p>
- java -Xms128m -Xmx256m
盡管你有了合理的內(nèi)存設(shè)置,也可以監(jiān)控進程,但你仍然可能看到內(nèi)存隨時間增加。為了進一步探究原因,你可以使用下面的命令查看對象實例的直方圖:
jmap -histo $PID
如果仍然沒有足夠的信息,那么可以用以下命令進行堆轉(zhuǎn)儲:
jmap -dump:format=b,file=/tmp/dump1.hprof $PID
通常,我會用兩個堆轉(zhuǎn)儲,然后使用下面的jhat命令比較它們:
jhat -baseline /tmp/dump1.hprof /tmp/dump2.hprof
這個命令會啟動一個HTTP服務(wù)器,你可以用它來探索這兩個堆轉(zhuǎn)儲之間的差值。在默認(rèn)情況下,HTTP服務(wù)器啟動7000端口,你可以在瀏覽器中訪問該端口。
如果你有防火墻,可以通過SSH訪問,那么你可以通過如下命令連接該端口:
ssh -L 7000:localhost:7000 $HOST
向下滾動到***頁的底部,你會看到兩個有用的鏈接:
-
Show heap histogram
-
Show instance counts for all classes (excluding platform)
這將給你展示在不同堆轉(zhuǎn)儲之間所有“新”的實例,應(yīng)該對你檢測泄漏來自哪里有些幫助。截圖如下:
然后你就擁有了一個神奇命令行的快速查看目錄,以便于你需要診斷內(nèi)存泄漏時使用(然而我總是忘記)。
分享文章:如何診斷Java中的內(nèi)存泄露
URL網(wǎng)址:http://m.5511xx.com/article/cdpggee.html


咨詢
建站咨詢
