跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
JVM监控工具
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= JVM监控工具 = '''JVM监控工具'''是用于观察、诊断和优化Java虚拟机(JVM)运行时状态的实用程序集合。这些工具可以帮助开发者分析内存使用、线程行为、垃圾回收(GC)性能以及JVM内部的其他关键指标,从而定位性能瓶颈或内存泄漏问题。 == 概述 == JVM监控工具主要分为两类: 1. '''命令行工具''':如<code>jps</code>、<code>jstat</code>、<code>jmap</code>、<code>jstack</code>等,通常随JDK提供。 2. '''图形化工具''':如JConsole、VisualVM、Java Mission Control(JMC),提供可视化界面。 这些工具通过访问JVM的'''MBean服务器'''或直接读取'''JVM内部数据'''来提供监控功能。 == 常用命令行工具 == === jps(JVM Process Status Tool) === 列出当前用户的所有Java进程及其主类名和JVM参数。 <syntaxhighlight lang="bash"> # 示例:列出所有Java进程 jps -l </syntaxhighlight> 输出示例: <pre> 12345 com.example.MainClass 67890 sun.tools.jps.Jps </pre> === jstat(JVM Statistics Monitoring Tool) === 实时监控JVM的堆内存、类加载、GC活动等统计信息。 <syntaxhighlight lang="bash"> # 示例:每1秒打印一次GC情况,共打印5次 jstat -gcutil <pid> 1000 5 </syntaxhighlight> 输出示例(单位:百分比): <pre> S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 99.80 68.45 35.67 95.12 90.23 15 0.123 3 0.456 0.579 </pre> === jmap(Memory Map Tool) === 生成堆内存快照(Heap Dump)或查看内存对象分布。 <syntaxhighlight lang="bash"> # 示例:生成堆转储文件 jmap -dump:format=b,file=heap.hprof <pid> </syntaxhighlight> === jstack(Stack Trace Tool) === 捕获线程堆栈信息,用于诊断死锁或高CPU占用问题。 <syntaxhighlight lang="bash"> # 示例:输出线程快照 jstack -l <pid> > thread_dump.txt </syntaxhighlight> == 图形化工具 == === JConsole === JDK自带的轻量级监控工具,支持: * 内存使用曲线 * 线程状态可视化 * MBean操作 启动方式: <syntaxhighlight lang="bash"> jconsole </syntaxhighlight> === VisualVM === 功能更强大的图形化工具,支持: * 插件扩展(如GC日志分析) * 采样式CPU分析 * 内存快照对比 === Java Mission Control(JMC) === Oracle提供的专业级工具,包含: * 飞行记录器(Flight Recorder) * 低开销的性能事件监控 == 实际案例 == '''案例:诊断内存泄漏''' 1. 使用<code>jstat</code>发现老年代(Old Generation)内存持续增长: <syntaxhighlight lang="bash"> jstat -gcold <pid> 1s </syntaxhighlight> 2. 用<code>jmap</code>生成堆转储: <syntaxhighlight lang="bash"> jmap -histo:live <pid> | head -20 </syntaxhighlight> 3. 通过VisualVM分析发现某个缓存类实例数量异常增长。 == 高级监控技术 == === JMX(Java Management Extensions) === 通过编程方式访问JVM监控数据: <syntaxhighlight lang="java"> import javax.management.*; import java.lang.management.*; MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); System.out.println("Heap usage: " + memoryBean.getHeapMemoryUsage()); </syntaxhighlight> === 飞行记录器(Flight Recorder) === 启用JFR记录(需商业授权): <syntaxhighlight lang="bash"> java -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=recording.jfr ... </syntaxhighlight> == 监控指标解析 == 关键指标公式: * '''GC吞吐量''':<math>\text{Throughput} = \left(1 - \frac{\text{GC时间}}{\text{总运行时间}}\right) \times 100\%</math> * '''内存泄漏率''':<math>\text{LeakRate} = \frac{\Delta \text{OldGenUsed}}{\Delta \text{Time}}</math> == 可视化关系图 == <mermaid> graph TD A[JVM监控] --> B[命令行工具] A --> C[图形化工具] B --> D[jstat] B --> E[jmap] B --> F[jstack] C --> G[JConsole] C --> H[VisualVM] C --> I[JMC] </mermaid> == 最佳实践 == 1. 生产环境优先使用低开销工具(如<code>jstat</code>) 2. 分析性能问题时结合多种工具数据 3. 长期监控建议配置JMX远程访问+Prometheus+Grafana方案 == 参见 == * [[JVM内存模型]] * [[垃圾回收机制]] * [[Java性能调优]] [[Category:计算机科学]] [[Category:面试技巧]] [[Category:JVM相关]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)