jstack
- 可以查看或导出 java 应用程序中线程堆栈信息
- jstack用于生成java虚拟机当前时刻的线程快照
- 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
- jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
- 处理问题:
高cpu占用率排查
死锁线程的定位
jstat
- 在JDK中存在,用于提供与JVM性能相关的统计信息,例如垃圾收集,编译活动。
- jstat的主要优势在于,它可以在运行JVM且无需任何先决条件的情况下动态捕获这些指标
- 可以查看堆内存各部分的使用量,以及加载类的数量
- 实时显示本地或者远程 JVM进程中类装载、内存、垃圾收集器、JIT编译等数据。
- jstat命令详解
- 处理问题:
频繁gc定位
jmap
- 它可以生成 java 程序的 dump 文件
- 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列
- jmap 不能用于查询当前运行的JVM 属性和参数值
- 使用场景:
某环境经常full gc,长期内存占用率很高,疑似内存泄露
jinfo
实时查看和调整JVM配置参数
- 查看java系统参数
- 调整JVM参数
- 查看某个JVM参数
jsp
- jsp命令用于查询真正运行的JVM进程
jcmd
- 在JDK 1.7之后,新增,是一个多功能工具,可以用来导出堆,查看Java进程,导出线程信息,执行GC等
- 发送诊断命令请求到正在运行的Java虚拟机(JVM)。它必须和JVM运行在同一台机器上,并且与启动JVM用户具有相同的组权限。
- jcmd拥有jmap的大部分功能,并且Oracle官方也建议使用jcmd代替jmap
- 处理问题:
抓现场堆栈(dump threads)
抓运行时堆内存(dump heap)
采集GC日志
定位高CPU占用问题等。
查看gc、监控频繁GC使用
jstat
定位线程死锁用哪个
jstack
分析定位频繁gc、Full GC、内存泄漏
jmap