偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何診斷 Java 中的內存泄露

開發(fā) 后端
這個命令會啟動一個HTTP服務器,你可以用它來探索這兩個堆轉儲之間的差值。在默認情況下,HTTP服務器啟動7000端口,你可以在瀏覽器中訪問該端口。

每次我懷疑有內存泄漏時,我都要翻箱倒柜找這些命令。所以,這里總結一下以備后用:

首先,我用下面的命令監(jiān)視進程:

  1. while ( sleep 1 ) ; do ps -p $PID -o %cpu,%mem,rss  ; done 

(如果有的話還有New Relic)

如果你看到內存上升很快,可能是因為虛擬機設置。如果你沒有明確指定JVM的內存設置,它將設置默認值給他們。要獲得默認值,使用以下命令:

  1. java -XX:+PrintFlagsFinal -version | grep -i HeapSize 

如果這些都不符合你所希望的,那么你就需要指定JVM的內存設置??梢杂孟旅娴拿钤O置最小和***堆大小:

  1. java -Xms128m -Xmx256m 

盡管你有了合理的內存設置,也可以監(jiān)控進程,但你仍然可能看到內存隨時間增加。為了進一步探究原因,你可以使用下面的命令查看對象實例的直方圖:

jmap -histo $PID

如果仍然沒有足夠的信息,那么可以用以下命令進行堆轉儲:

jmap -dump:format=b,file=/tmp/dump1.hprof $PID

通常,我會用兩個堆轉儲,然后使用下面的jhat命令比較它們:

jhat -baseline /tmp/dump1.hprof /tmp/dump2.hprof

這個命令會啟動一個HTTP服務器,你可以用它來探索這兩個堆轉儲之間的差值。在默認情況下,HTTP服務器啟動7000端口,你可以在瀏覽器中訪問該端口。

如果你有防火墻,可以通過SSH訪問,那么你可以通過如下命令連接該端口:

ssh -L 7000:localhost:7000 $HOST

向下滾動到***頁的底部,你會看到兩個有用的鏈接:

這將給你展示在不同堆轉儲之間所有“新”的實例,應該對你檢測泄漏來自哪里有些幫助。截圖如下:

診斷Java中的內存泄露

然后你就擁有了一個神奇命令行的快速查看目錄,以便于你需要診斷內存泄漏時使用(然而我總是忘記)。

責任編輯:王雪燕 來源: ImportNew
相關推薦

2010-10-25 10:10:27

ibmdwJava

2010-11-05 13:02:58

內存iPhone

2017-12-11 11:00:27

內存泄露判斷

2015-01-14 13:50:58

AndroidHandler內存泄露

2014-12-18 10:16:00

Java

2017-10-26 08:43:18

JavaScript內存處理

2020-06-23 09:48:09

Python開發(fā)內存

2009-06-16 11:11:07

Java內存管理Java內存泄漏

2015-05-14 15:38:40

javajava內存泄露

2011-11-17 13:59:41

Java內存管理內存泄露

2013-08-07 10:07:07

Handler內存泄露

2012-02-22 21:28:58

內存泄漏

2010-09-25 11:23:15

Java內存泄露

2010-09-25 11:32:24

Java內存泄漏

2013-12-23 09:25:21

2016-05-25 10:03:51

JavaScript內存泄露

2023-03-03 12:37:50

JavaJVM內存溢出

2010-06-02 13:00:43

Linux 內存監(jiān)控

2022-08-26 07:33:49

內存JVMEntry

2015-03-27 11:34:59

JavaJava編寫引發(fā)內存泄露
點贊
收藏

51CTO技術棧公眾號