在java 程序研发过程中,常常会对已经完成的java程序进行检测和分析,如何查看开发的java程序内存是否有泄漏的风险?
众所周知,java程序是运行在jvm虚拟机上的,如果java程序写的有问题,导致内存一直占用GC回收不掉,那么这个程序运行一段时间后jvm会内存溢出,从而导致项目崩溃。为了检测开发的java程序 jvm内存是否有泄漏,这里我们使用的是 jconsole.exe 。
jconsole.exe 我使用的是jdk1.8 bin目录下的。见下图(1):
如何进行远程连接 监控 测试环境 和 开发环境的程序是否有内存泄漏的情况。
介绍一下项目背景
1.docker环境 host模式 启动 java应用
2.java应用使用springboot框架开发。
重点来了!
创建容器时候的命令如下:
```
docker run -d --name <容器名称> \
--net=host \ //这里以host模式创建容器 即 和容器共用一个网络环境
-v /data/app/XXX:/root/ \ //挂载路径
-e TZ="Asia/Shanghai" \ //解决时区问题
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 :是你要连接监控的机器ip
我这里启动的image是构建dockerfile的后的image。具体按自己实际情况替换掉路径
步骤 1-7 是常规的启动jar程序的main 方法。
这里远程连接是没有使用密码的。使用密码 还没有试过,后面有时间探究出来了再完善此文章。
现在打开本机的jdk1.8目录 打开 jconsole.exe 见 图(1),随后出现下图
图(2):
选择远程连接 输入 ====> 远程ip:port ==========>>点击连接 如下图
图(3)
Done!