本文共 3316 字,大约阅读时间需要 11 分钟。
jvisualvm 是JDK自带的图形界面操作功能的JVM性能监控和诊断工具,支持分析堆转储文件、在线实时监控本地JVM进程,以及远程服务器上的JVM进程。以下是关于jvisualvm 的使用指南,包括如何下载堆转储文件、分析内存溢出dump文件、监控本地JVM以及远程JVM的操作方法。
要从服务器下载堆转储文件并分析,可以按照以下步骤操作:
注意:生产环境中建议通过设置JVM启动参数 -XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath=
要分析内存溢出dump文件,需先设置JVM启动参数:
-Xms50m -Xmx50m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump\blogDump.hprof
@GetMapping("/testOutMemoryError")public RespBean outMemoryErrorTest() { List userDTOList = new ArrayList<>(); for (int i = 0; i < 1000000; i++) { UserDTO userDTO = new UserDTO(); // ...用户数据初始化逻辑... userDTOList.add(userDTO); } RespBean respBean = new RespBean(); respBean.setStatus(200); respBean.setMsg("success"); respBean.setData(userDTOList); return respBean;} 从内存溢出堆转储实例信息可以看到,UserDTO类产生了47899个实例对象,占用了4406708字节的堆内存。
监控本地JVM非常简单,打开jvisualvm即可从左侧栏目看到本机应用。点击对应的应用可以查看内存、线程和GC信息。
如果应用出现线程死锁,可以通过线程Tab页查看死锁信息。点击右上方的线程Dump链接可以看到线程死锁的具体原因。
jvisualvm 远程监控功能可以帮助我们监控远程服务器上的JVM进程,适用于测试环境中的性能测试和优化。
配置远程监控:
nohup java -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=8999 \ -Dcom.sun.management.jmxremote.local.only=true \ -Dcom.sun.management.jmxremote.authenticate=true \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.rmi.port=8999 \ -Dcom.sun.management.jmxremote.access.file=jmx.access \ -Dcom.sun.management.jmxremote.password.file=jmx.password \ -Djava.rmi.server.hostname=159.138.489 \ -jar jstx-server.jar &
JAVA_OPTS="-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=8999 \ -Dcom.sun.management.jmxremote.local.only=true \ -Dcom.sun.management.jmxremote.authenticate=true \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.rmi.port=8999 \ -Dcom.sun.management.jmxremote.access.file=jmx.access \ -Dcom.sun.management.jmxremote.password.file=jmx.password \ -Djava.rmi.server.hostname=159.138.489"
vim jmx.accessadmin readwritevim jmx.passwordadmin 123456
chmod -R 600 jmx.passwordchmod -R 600 jmx.access
建立内网与公网IP映射:
vim /etc/hosts# 添加映射记录192.168.1.100 localhost192.168.1.100 remote-server
3.开放防火墙和云服务器安全组策略:
连接成功后,可以像监视本地JVM进程一样监视远程服务器上的JVM进程。
通过jvisualvm,我们可以轻松分析堆转储文件、监控本地JVM进程以及远程服务器上的JVM进程。在生产环境中,建议使用Arthas中间件进行线上JVM调优,以提高性能和稳定性。
转载地址:http://yxqfk.baihongyu.com/