
基于jvisualvm的内存监控与远程连接配置指南
一、背景
某XX生产环境,内存使用率总是居高不下,怀疑是内存溢出,现使用visualVM对其进行内存与线程分析,并反馈给研发部门。
二、jvisualvm
jVisualVM 是 Oracle 提供的免费 Java 监控和性能分析工具,内置于 JDK 中(JDK 1.6+ 至 JDK 8,JDK9以上不再自带visualVM,需要手动安装)。以下是它的主要功能、应用场景和示例说明:
2.1核心功能:
- 实时监控
- 资源消耗:动态展示堆内存、CPU 使用率、类加载数量、线程数等。
- 线程状态:实时查看线程运行/阻塞/等待状态,标注死锁。
- JVM 参数:显示启动参数、系统属性、垃圾回收策略等。
- 内存与线程分析
- Heap Dump:生成堆快照,分析对象数量及内存占用(如
java.lang.String
实例占比)。 - Thread Dump:捕捉线程堆栈,定位死锁(直接标记阻塞的线程及代码位置)。
- Heap Dump:生成堆快照,分析对象数量及内存占用(如
- 性能分析(Profiling)
- CPU Profiler:统计方法执行时间,识别热点方法(如频繁调用的算法)。
- 内存 Profiler:追踪对象分配,发现内存泄漏(如未释放的集合缓存)。
- 远程与多JVM管理
- 通过 JMX 或 jstatd 监控远程服务器 JVM(需配置
-Dcom.sun.management.jmxremote
)。 - 批量管理本地/远程 Java 进程,支持强制结束无响应应用。
- 通过 JMX 或 jstatd 监控远程服务器 JVM(需配置
- 可视化工具
- 图表化展示 CPU/内存趋势,对比不同时间点的堆快照(如修复内存泄漏后的内存变化)。
- 插件扩展
- Visual GC:动态展示各代内存(Eden/Survivor/Old Gen)的垃圾回收状态。
- BTrace:动态注入诊断代码(如记录方法入参/返回值)。
2.2访问方式
-
访问本地 JVM 【调试开发环境或本地运行的 Java 应用】
-
访问远程 JVM 【监控生产环境或服务器上的 Java 应用】
- 通过 JMX 连接
- 通过 jstatd 连接
- 通过 SSH 隧道,X11 转发 连接
2.2访问远程 JVM方式对比
方式 | 功能完整性 | 安全性 | 配置复杂度 | 适用场景 |
---|---|---|---|---|
JMX | 完整 | 中(需手动加固) | 高 | 生产环境(需远程深入分析) |
jstatd | 基础监控 | 低(RMI 明文传输) | 高 | 快速查看基础指标 |
SSH + X11 | 完整 | 高(加密隧道) | 低(需 GUI 支持) | 服务器无端口开放但允许 SSH + GUI |
三、环境信息
IP地址 | jdk版本 | 系统版本 |
---|---|---|
172.22.33.20 | jdk8 | openeuler 22.03 LTS SP4 |
四、安装所需软件包
用于 SSH 的 X11 转发
yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock xterm -y
修改配置文件,支持X11 转发
- [root@openeuler ~]# vim /etc/ssh/sshd_config
AllowTcpForwarding yes
X11Forwarding yes
X11UseLocalhost no
- sshd 检测配置文件,是否正确
[root@openeuler ~]# sshd -t
- 重启ssh
[root@openeuler ~]# systemctl restart sshd
五、通过X11隧道的方式使用Xshell+Xmanager打开jvisualvm
- 创建一个会话
- 隧道,X11 转移,选择转发到X DISPLAY localhost:0.0
- 打开xmanger 软件,保持后台运行
- 测试打开一个xclock, 观察能不能打开一个图形化的钟出来
- 使用jvisualvm
六、通过X11隧道的方式使用MobaXterm上打开jvisualvm
- 创建一个会话
- X11 保持默认配置即可
- 测试打开一个xclock, 观察能不能打开一个图形化的钟出来
- 使用jvisualvm
七、高版本jdk使用jvisualvm
7.1 下载jvisualvm
- 下载地址: https://visualvm.github.io/
下载最新的就好,下载完了之后,解压到服务器上
7.2 修改配置文件指定JDK 路径
visualvm_jdkhome="/home/application/jdk-11.0.22"
7.3 运行 jvisualvm
[root@openeuler ~]# /root/visualvm_2110/bin/visualvm
八、jvisualvm 定位问题
参考下面的👇的文章:
- https://blog.csdn.net/zuozewei/article/details/141724179
- https://zhuanlan.zhihu.com/p/685289577
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果