当前位置: 首页 > news >正文

Java问题排查常用命令行工具速查表


Java问题排查常用命令行工具速查表

工具典型用途常用命令示例说明/场景
jps列出本机所有Java进程jps -l获取Java进程PID和主类名,配合其它工具使用
jcmd动态诊断、堆heap dump、线程dump等jcmd help
jcmd VM.flags
jcmd GC.heap_info
jcmd Thread.print
功能最全,替代jmap/jstack/jinfo等
jinfo查看/调整JVM参数jinfo -flags 查看JVM启动参数、运行参数
jstat监控JVM内存、GC等统计jstat -gc 1000 5观察GC频率、各代内存使用情况
jmap生成堆dump、对象直方图、类信息jmap -dump:format=b,file=heap.hprof 堆分析、内存泄漏定位
jstack导出线程栈快照jstack > threads.txt死锁、线程阻塞、CPU高分析
jhat分析堆转储文件(已被MAT/VisualVM替代)jhat heap.hprof简单web界面分析heap dump(不推荐新项目)
javap反编译class文件javap -c -l MyClass分析字节码,定位优化点,或排查热部署问题
lsof查看进程打开的文件和网络连接lsof -p 排查文件句柄泄漏、网络连接泄漏
strace跟踪系统调用(Linux)strace -p 深度排查IO阻塞、native层调用
perf/top性能火焰图、系统级CPU热点perf top -p 分析本地方法、JVM与操作系统之间的性能瓶颈
gcore生成进程core dump(Linux)gcore JVM崩溃、native崩溃分析,配合gdb使用
netstat网络连接、端口监听netstat -anopgrep
vmstat/iostat系统内存、IO负载vmstat 1 5 / iostat -d 1 5JVM卡顿是否由系统资源瓶颈导致
ps进程状态、资源占用ps -p -o pid,pcpu,pmem,etime,cmd结合top,监控JVM资源消耗

常用工具能力简述

1. jcmd(推荐)

  • 现代JVM诊断首选,几乎覆盖jmap、jstack、jinfo所有功能,且不易崩溃。
  • 实用命令:
    jcmd <pid> help
    jcmd <pid> VM.flags                # 查看JVM参数
    jcmd <pid> GC.heap_info            # 内存分布
    jcmd <pid> Thread.print            # 线程栈快照
    jcmd <pid> GC.class_histogram      # 类实例统计
    jcmd <pid> GC.heap_dump /tmp/heap.hprof   # 堆转储
    

2. jinfo

  • JVM参数和值的查询,调优时必备。
  • 常用:
    jinfo -flags <pid>
    

3. lsof

  • 文件句柄、端口泄漏排查利器,适合定位“Too many open files”等问题。

4. strace

  • 跟踪系统调用,常用于排查阻塞、native方法问题(如JNI、文件IO hang)。

5. perf/top

  • 分析JVM与系统层面的CPU热点,结合火焰图可定位本地方法/系统瓶颈。

6. ps/vmstat/iostat

  • 辅助判断JVM外部资源瓶颈,如CPU、内存、磁盘IO。

场景举例

  • 线程死锁/卡顿:jstack/jcmd Thread.print
  • 内存泄漏:jmap/jcmd GC.heap_dump + MAT/VisualVM
  • 文件/网络连接泄漏:lsof/netstat
  • JVM参数核查:jcmd VM.flags / jinfo -flags
  • GC频繁/老年代溢出:jstat -gcutil
  • 系统级卡顿:vmstat/iostat/top/perf

小结

  • jcmd 是现代JVM诊断的“瑞士军刀”,建议优先掌握。
  • 结合 lsof、strace、netstat、ps、vmstat 等系统工具,可实现从JVM到操作系统的全链路排查。
  • 建议根据实际问题场景选择合适工具,组合使用效果更佳。

建议收藏本表,线上问题排查时对照使用,效率倍增!

http://www.xdnf.cn/news/438031.html

相关文章:

  • 深度学习中.cuda()、.eval()与no_grad详解
  • 【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结
  • 解决docker alpine缺少字体的问题 Could not initialize class sun.awt.X11FontManager
  • 浅析 Golang 内存管理
  • Chrome安装最新vue-devtool插件
  • 国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)
  • 【​​HTTPS基础概念与原理​】​​SSL/TLS协议演进史:从SSLv3到TLS 1.3
  • 嵌入式Linux Qt开发:2、Qt creator简单配置、Qt Designer使用以及信号槽机制使用
  • QT之信号与槽
  • 嵌入式设计模式基础--C语言的继承封装与多态
  • Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践
  • 初学c语言14(指针6)
  • 用模型预测控制算法实现对电机位置控制仿真
  • 深入浅出入侵检测系统(IDS)的工作原理与应用场景
  • TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能
  • Ubuntu24.04编译ORB_SLAM的一系列报错解决
  • 数字取证-内存取证(volatility)
  • 使用VSCode编辑Markdown+PlantUml
  • 前端面试宝典---js垃圾回收机制
  • “海外滴滴”Uber的Arm迁移实录:重构大规模基础设施​
  • 知识图谱重构电商搜索:下一代AI搜索引擎的底层逻辑
  • 广东省省考备考(第十天5.14)—言语(第三节课)
  • deepseek梳理java高级开发工程师算法面试题
  • C++23 中的 ranges::starts_with 与 ranges::ends_with
  • Go语言中的函数类型参数:深入理解`func()`
  • 编程日志5.6
  • 比亚迪固态电池突破:王传福的技术哲学与产业重构|创客匠人热点评述
  • 部署安装gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm
  • PyQt5基本窗口控件(QComboBox(下拉列表框))
  • AI开发者的算力革命:GpuGeek平台全景实战指南(大模型训练/推理/微调全解析)