最近刚换完工作:在公司需要用到相应的工具进行分析线上代码运行情况。因而做一下记录。
在开发的过程中,应线上出现的各种问题,我们需要分析代码的相关运行情况,如资源占用情况,线程数量,行日志、异常堆栈、GC日志、快照 文件 等。这个时候,工具往往会给我们带个便捷。工具是知识处理数据的手段。因而我们需要懂的Java自带的相应分析工具。
SunJdk监控和故障处理工具:
名称 | 作用 |
jps | JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机的进程 |
jstat | JVM Statistics Monitoring Tool,用于收集 HotSpot 虚拟机各方面的运行数据 |
jinfo | Configuration Info for Java ,显示虚拟机配置信息 |
jmap | Memory Map for Java,生成虚拟机的内存转春快照。 |
jhat | JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个Http/Html服务器,让用户可以在浏览器上查看分析结果。 |
jstack | Stack Trace for Java ,显示虚拟机的线程快照 |
1.Jps:虚拟机进程状态工具。
jps命令格式: jps [options] [hostid]
jps工具的主要选项:
- -q: 不输出 类名称、Jar 名称 和传入 main 方法的 参数;
- -l: 输出 main 类或 Jar 的 全限定名称;
- -m: 输出传入 main 方法的 参数;
- -v: 输出传入 JVM 的参数
2. jstat-虚拟机统计信息监控工具
各种 运行状态信息 的命令行工具。它可以显示 本地 或者 远程虚拟机 进程中的 类装载、内存、垃圾收集、jit 编译 等运行数据。
jps命令格式:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option 参数含义:
-t:可以在打印的列加上 timestamp 列,用于显示系统运行的时间。
-h 可以在 周期性数据 的时候,可以在指定输出多少行以后输出一次 表头
vmid:进程ID
lines: 表头 与 表头 的间隔行数。
interval: 执行每次的 间隔时间,单位为 毫秒
count: 用于指定输出记录的 次数,缺省则会一直打印。
option 值的选项 :
选项 | 作用 |
-class | 监视类装载,卸载数量,总空间以及类装载所耗费的时间 |
-compiler | 输出JIT编译器编译过的方法,耗时等信息 |
-gc | 显示和 gc相关的 堆信息 |
-gccapacity | 监视内容与-gc基本一样,但输出主要管制Java堆各个区域使用到的最大,最小空间 |
-gcmetacapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间 |
-gcnew | 监视新生GC状况 |
-gcold | 显示 老年代GC状况 |
-gcoldcapacity | 显示 老年代 的大小 |
-gcutil | 监视内容与-gc基本一样,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-printcompilation | 输出已经被JIT编译的方法。 |
案例: jstat -gc 5555 250 20
每250秒查询一次进程5555垃圾收集状况,一共查询20次。
3.jinfo配置信息查看工具
这个命令作用是实时查看和调整 虚拟机运行参数
jinfo 命令格式
jinfo [-options] <pid>
4.jmp 内存映射工具 --查看内存使用的详细信息
命令格式
jmap [-options] <pid>
选项参数的意思:
选项 | 作用 |
-dump | 生成Java堆转储快照 |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在linux/Solaris平台下有效。 |
-heap | 显示 Java堆中的详细信息 |
-histo | 显示对象的统计 消息 |
-permstat | 以Classcloader为统计口径显示永久代内存状态。只在Linux/Sorlaris平台下有效。 |
-F | 强制生成dump快照 |
-heap:
-histo:
-clstats:
5.jstack 堆栈跟踪工具 :
生成 java 虚拟机当前时刻的 线程快照。线程快照 是当前 java 虚拟机内 每一条线程 正在执行的 方法堆栈 的 集合。生成线程快照的主要目的是定位线程出现 长时间停顿 的原因,如 线程间死锁、死循环、请求外部资源 导致的 长时间等待 等等
命令格式:
jstack [-options] <pid>
options:
选项 | 作用 |
-F | 当正确输出的请求不被响应,强制输出线程堆栈 |
-I | 除了堆栈外,显示关于锁的附加信息 |
-m | 如果调用本地方法的话,可以显示c/c++的堆栈 |
6.jhat:虚拟机堆转储快照分析工具。用来分析jmap生成的堆转储快照。