Linux快速查看JVM内存命令

使用jstat -gc 实时监控堆内存各区域使用量,或通过jmap -heap 查看内存配置与使用摘要,需先获取Java进程ID(jpsps),也可借助jcmd VM.native_memory分析Native内存。

在Linux系统中查看JVM内存状态是性能调优和故障排查的关键操作,以下是6种专业方法及其详细操作步骤,结合命令行工具和系统级监控,确保全面覆盖不同场景需求:

Linux快速查看JVM内存命令


jstat 命令(实时内存监控)

适用场景:实时监控堆内存、GC活动,适合长期观察内存波动
操作步骤

jstat -gc <pid> 1000 5  # 每1秒采样1次,共5次

输出关键指标解析

  • S0C/S1C:Survivor区容量 (KB)
  • EC/OC:Eden区/老年代容量 (KB)
  • MU:元数据区使用量 (Metaspace)
  • YGC/YGCT:Young GC次数/耗时
  • FGC/FGCT:Full GC次数/耗时
    优势:低开销,适合生产环境持续监控。

jcmd 命令(详细内存快照)

适用场景:获取JVM内部详细内存报告
操作步骤

jcmd <pid> VM.native_memory summary  # 查看Native Memory
jcmd <pid> GC.heap_info               # 输出堆内存分布

输出解读

  • Total reserved:JVM保留的总内存
  • Committed:实际向系统申请的内存
  • 按模块分类(Java Heap/Class/Thread/Code等)
    注意:需启动时添加 -XX:NativeMemoryTracking=summary

jmap 命令(堆内存直方图与Dump)

适用场景:分析对象分布或生成堆转储文件
基础命令

Linux快速查看JVM内存命令

jmap -heap <pid>         # 堆内存配置摘要
jmap -histo:live <pid>   # 存活对象统计(按类排序)
jmap -dump:live,file=heap.hprof <pid>  # 生成堆转储文件

关键输出

  • 对象数量及占用内存排名(排查内存泄漏)
  • 堆配置参数(NewRatio/SurvivorRatio等)
    风险提示jmap -dump 可能暂停应用,生产环境慎用。

图形化工具(JConsole/VisualVM)

适用场景:直观分析内存趋势,适合开发环境
操作流程

  1. 启动JVM时添加JMX参数:
    -Dcom.sun.management.jmxremote.port=9010
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
  2. 本地运行 jconsolejvisualvm,连接远程进程
    功能亮点
  • 实时堆/非堆内存折线图
  • 线程/类加载监控
  • MBean操作支持

系统级内存检查(/proc 文件系统)

适用场景:验证JVM实际物理内存占用
操作命令

cat /proc/<pid>/status | grep -E 'VmRSS|VmSize'  # 物理内存(RSS) vs 虚拟内存(Size)
cat /proc/<pid>/smaps | grep -i heap              # 定位堆内存物理映射

指标说明

  • VmRSS:JVM实际使用的物理内存(含堆外)
  • VmSize:JVM申请的虚拟内存总量
    优势:不依赖JDK工具,通用性强。

Arthas(在线诊断神器)

适用场景:动态诊断无需重启,支持内存泄漏分析
操作示例

Linux快速查看JVM内存命令

dashboard                          # 实时内存/线程面板
memory                             # 内存使用报告
heapdump /tmp/heap.hprof           # 安全生成堆Dump

功能特色

  • 对象占用统计:sc -d *ClassName 查看类加载器
  • OQL表达式查询对象
    推荐:开源工具,支持生产环境热修复。

最佳实践建议

  • 日常监控 → 首选 jstat + /proc 组合(低开销)
  • 内存泄漏分析jmap -histoArthas 在线诊断
  • 深度剖析 → 生成堆Dump用MAT(Eclipse Memory Analyzer)分析
  • 容器环境:确保JDK工具包已安装(如 openjdk-11-tools

引用说明
本文方法参考Oracle官方文档《JDK Tools and Utilities》及Arthas开源项目文档,部分命令参数基于OpenJDK 11验证,系统级指标遵循Linux procfs规范。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/23558.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月14日 08:26
下一篇 2025年6月14日 08:32

相关推荐

  • Linux如何查看JDK版本

    在Linux终端输入java -version可查看当前默认JDK版本,使用update-alternatives –list java可列出所有已安装JDK路径及其版本,javac -version则用于验证JDK编译器版本。

    2025年6月15日
    200
  • Linux怎么测试WSDL?

    在Linux中,测试WSDL服务可执行以下步骤: ,1. 使用curl命令调用WSDL地址:curl -X GET http://example.com?wsdl验证XML返回; ,2. 通过soapui命令行工具或wsdl2python生成客户端代码发送测试请求; ,3. 用telnet或nc检查服务端口连通性。

    2025年6月9日
    000
  • Linux如何快速安装Oracle?

    在Linux系统上使用Oracle数据库需先下载安装包,配置内核参数与用户环境,运行安装程序创建数据库实例并启动监听器,随后可通过SQL*Plus、SQL Developer等工具连接数据库进行SQL操作及基本管理。

    2025年6月2日
    400
  • Linux硬盘分区如何操作?

    使用 fdisk 或 gdisk 等工具对硬盘进行分区,创建主分区、扩展分区或逻辑分区,规划好分区布局(如 /, /home, swap),创建分区后,使用 mkfs 格式化为 ext4 等文件系统,最后编辑 /etc/fstab 文件实现分区挂载。

    2025年6月7日
    000
  • Linux如何查IP

    在Linux中查询IP地址,常用两种方法:,1. 使用传统命令:ifconfig(若未安装,需通过sudo apt install net-tools安装),2. 使用现代命令:ip addr show 或简写 ip a,这两个命令会列出网络接口及其对应的IP地址信息(如eth0、wlan0等),执行时可能需要sudo权限。

    2025年6月7日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN