国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

診斷Java中的內存泄露

2019-11-14 14:54:37
字體:
來源:轉載
供稿:網友

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

首先,我用下面的命令監視進程:

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的內存設置。可以用下面的命令設置最小和最大堆大小:

1
java -Xms128m -Xmx256m

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

1
jmap -histo $PID

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

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

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

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

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

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

1
ssh -L 7000:localhost:7000 $HOST

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

  • Show heap histogram
  • Show instance counts for all classes (excluding platform)

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

Image title

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

  前兩天在一群里看見有人推薦一個app叫問啊,就可以發題答題那種的,感覺就跟uber滴滴打車似的,一般這種軟件一上來就砸錢給紅包啥的,哥之前刷過uber的單有經驗!試驗了幾次應該可以刷,把注冊紅包和之前領的紅包錢套現,目前我提了五十多,目測還能刷更多。ps,但是盡量要問技術相關的問題,不然容易被封。
  有技術的可以自己試,不會的可以q我315414695:QQ群290551701 聚集很多互聯網精英,技術總監,架構師,項目經理!開源技術研究,歡迎業內人士,大牛及新手有志于從事IT行業人員進入!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平阳县| 三河市| 黎城县| 贵溪市| 铜鼓县| 汶川县| 新巴尔虎右旗| 滨海县| 北川| 莲花县| 达州市| 三明市| 浦东新区| 泸西县| 柘城县| 来安县| 抚宁县| 赫章县| 罗甸县| 廊坊市| 许昌县| 萍乡市| 正阳县| 乡城县| 正宁县| 天气| 宝清县| 温州市| 孝感市| 响水县| 察雅县| 古丈县| 宜黄县| 万源市| 保德县| 望城县| 周至县| 扶余县| 徐州市| 托克逊县| 全椒县|