在java 程序研發(fā)過程中,常常會對已經(jīng)完成的java程序進行檢測和分析较剃,如何查看開發(fā)的java程序內存是否有泄漏的風險咕别?
眾所周知,java程序是運行在jvm虛擬機上的重付,如果java程序寫的有問題顷级,導致內存一直占用GC回收不掉,那么這個程序運行一段時間后jvm會內存溢出确垫,從而導致項目崩潰弓颈。為了檢測開發(fā)的java程序 jvm內存是否有泄漏,這里我們使用的是? jconsole.exe 删掀。
jconsole.exe 我使用的是jdk1.8 bin目錄下的翔冀。見下圖(1):
如何進行遠程連接 監(jiān)控 測試環(huán)境? 和 開發(fā)環(huán)境的程序是否有內存泄漏的情況。
介紹一下項目背景
1.docker環(huán)境? host模式 啟動 java應用
2.java應用使用springboot框架開發(fā)披泪。
重點來了纤子!
創(chuàng)建容器時候的命令如下:
```
docker run -d --name <容器名稱> \
--net=host \? ? ? ? //這里以host模式創(chuàng)建容器 即 和容器共用一個網(wǎng)絡環(huán)境
-v /data/app/XXX:/root/ \? ? //掛載路徑
-e TZ="Asia/Shanghai" \? ? //解決時區(qū)問題
docker.io/isuper/java-oracle \? ? //此處使用的是oracle下的jdk? 當然也可以用openJDK
java -Dfile.encoding=UTF8 -Dcom.sun.management.jmxremote.ssl=false \? ? ? // 步驟一
-Dcom.sun.management.jmxremote.port=\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 步驟二
-Dcom.sun.management.jmxremote.authenticate=false \? ? ? ? ? ? ? ? ? ? ? // 步驟三
-Dcom.sun.management.jmxremote.ssl=false \? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 步驟四
-Dcom.sun.management.jmxremote.rmi.port=\? ? ? ? ? ? ? ? ? ? ? ? // 步驟五
-Djava.rmi.server.hostname=遠程ip\? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 步驟六
-jar -Xms64M -Xmx128M -Xmn20M /root/yourApp.jar? ? ? ? ? ? ? ? ? ? ? //步驟七
```
注意:
上面兩處的? <port>? 需要一致? 遠程ip :是你要連接監(jiān)控的機器ip
我這里啟動的image是構建dockerfile的后的image。具體按自己實際情況替換掉路徑
步驟 1-7 是常規(guī)的啟動jar程序的main 方法款票。
這里遠程連接是沒有使用密碼的控硼。使用密碼 還沒有試過,后面有時間探究出來了再完善此文章艾少。
現(xiàn)在打開本機的jdk1.8目錄 打開 jconsole.exe 見 圖(1),隨后出現(xiàn)下圖
圖(2):
選擇遠程連接? 輸入? ====>? 遠程ip:port? ==========>>點擊連接 如下圖
圖(3)
Done!