[TOC]
非 Java 应用 Perf – Linux下的系统性能调优工具 Java 应用 Perf jstack 线程状态跟踪
(1) jps -l
jps命令,查询正在运行的虚拟机java进程,一般显示信息就是,pid和进程名称:
(4)jmap 采集堆内存
jmap -dump:live,format=b,file=E:/dump201612271310.dat 14776
(3)jconsole jdk自带的console.exe (window)jdk自带的jvisualvm.exe (window)jstack(linux)alibaba/arthas 阿里巴巴的插件,挺好用的,推荐使用,还可以反编译源码
jstack - JVM堆栈跟踪工具 描述:它是java虚拟机自带的一种堆栈跟踪工具。 作用:
用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息(对于每个Java帧,打印完整的类名、方法名、字节码索引(BCI)和行号(如果可用)
)
用于生成JVM当前时刻的线程快照,主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
用于获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
温馨提示: 该命令可能在未来的版本中可能被丢弃,但是在JDK8、11中是存在的。
官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html
语法参数:
[TOC]
非 Java 应用 Perf – Linux下的系统性能调优工具 Java 应用 Perf jstack 线程状态跟踪
(1) jps -l
jps命令,查询正在运行的虚拟机java进程,一般显示信息就是,pid和进程名称:
(4)jmap 采集堆内存
jmap -dump:live,format=b,file=E:/dump201612271310.dat 14776
(3)jconsole jdk自带的console.exe (window)jdk自带的jvisualvm.exe (window)jstack(linux)alibaba/arthas 阿里巴巴的插件,挺好用的,推荐使用,还可以反编译源码
jstack - JVM堆栈跟踪工具 描述:它是java虚拟机自带的一种堆栈跟踪工具。 作用:
用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息(对于每个Java帧,打印完整的类名、方法名、字节码索引(BCI)和行号(如果可用)
)
用于生成JVM当前时刻的线程快照,主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
用于获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
温馨提示: 该命令可能在未来的版本中可能被丢弃,但是在JDK8、11中是存在的。
官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html
语法参数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 jstack [-l] <pid> jstack -F [-m] [-l] <pid> jstack [-m] [-l] <executable> <core> jstack [-m] [-l] [server_id@]<remote server IP or hostname> jstack [-l][-e] <pid> pid:Java进程的ID,可以通过jps命令查询到。 executable: 产生core dump的Java可执行程序 server-id:当多个DEBUG服务器在同一远程主机上运行时,可使用的可选唯一ID。 remote-hostname-or-IP:远程DEBUG的服务器主机名或IP地址 -F :强制打印一个堆栈转储。 -l :打印有关锁的其他信息,例如拥有的java.util.courrent可下载同步器的列表 -m :可以打印带有程序计数器(PC)的所有线程的Java和本机帧。
使用示例 1 2 3 4 5 6 7 8 9 10 jstack pid jstack -F pid jstack -l pid > /tmp/dump.log jstack -m pid jstack -J-d64 -m [pid]
使用说明 1.java线程的几种状态:
以下是状态转化图,可以较为清晰地看到状态转换的场景与条件,参考地址:http://ks.netease.com/blog?id=7659
2.在使用jstack命令中生成的dump堆栈日志中,我们需要了解以及重点关注如下状态(java.lang.Thread.State
)。
RUNNABLE 线程运行中或I/O等待。
DEADLOCK 死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。(重点关注)
BLOCKED 线程在等待monitor锁(synchronized关键字)。 (重点关注)
WAITING 线程在无限等待唤醒。
TIMED_WAITING 线程在等待唤醒,但设置了时限
https://blog.csdn.net/qq_30436011/article/details/120747999
4.2 jmap工具 描述:jmap 可以输出 Java 进程 内存中对象的工具。 jmap 一般和 jhat 或者 MAT 配合使用,以图像的形式直观的展示当前内存是否有问题。
参数说明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -dump:[live,]format=b,file=<filename> 以hprof二进制格式转储Java堆到指定filename的文件中。 live子选项是可选的,如果指定了live子选项,堆中只有活动的对象会被转储。 想要浏览heap dump,你可以使用 jhat(Java堆分析工具) 或者 MAT 读取生成的文件。 -finalizerinfo 打印等待终结的对象信息。 -heap 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和generation wise heap usage。 -histo[:live] 打印每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。 打印的虚拟机内部的类名称将会带有一个'*' 前缀。 如果指定了live子选项,则只计算活动的对象。 -permstat 打印Java堆内存的永久保存区域的类加载器的智能统计信息。 对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。 此外,包含的字符串数量和大小也会被打印。 -F 强制模式。如果指定的pid没有响应,请使用jmap -dump或jmap -histo选项。此模式下,不支持live子选项。 -h | -help 打印帮助信息。 -J<flag> 指定传递给运行jmap的JVM的参数。
示例1.jmap-histo 打印每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $jmap -histo 14110 num ---------------------------------------------- 1: 50994 7789848 [C 2: 22160 6263680 [B 3: 8527 1437176 [I 4: 49099 1178376 java.lang.String 5: 63 936248 [J 6: 19118 611776 java.util.HashMap$Node 7: 6243 549384 java.lang.reflect.Method 8: 8948 509464 [Ljava.lang.Object; 9: 10588 423520 java.util.TreeMap$Entry 10: 3696 417952 java.lang.Class 11: 1372 230544 [Ljava.util.HashMap$Node ; 12: 4760 228480 java.util.HashMap 13: 4789 191560 java.util.HashMap$ValueIterator 14: 5851 187232 java.io.File B byte C char D double F float I int J long Z boolean [ 数组,如[I表示int[] [L+类名 其他对象
示例2.jmap-heap 查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况1 2 3 4 5 $jmap -heap 14110Attaching to process ID 14110, please wait ... Debugger attached successfully. Server compiler detected. JVM version is 25.121-b13
示例 3.jmap-dump:format=b,file= 用jmap把进程内存使用情况dump到文件中1 2 3 $ jmap -dump:format=b,file=/tmp/123.hprof 14110 Dumping heap to /tmp/123.hprof ... Heap dump file created
4.3 jhat工具 描述:jhat 可以对 dump 出来的堆信息进行处理,以 html 页面的形式展示出来。 执行 jhat/tmp/123.hprof即可,默认端口是 7000,访问 http://localhost:7000 即可查看结果,通过 -port 指定端口。
weiyigeek.top-