java自带的工具:
- jstack:查看java stack和native stack具体信息,通常用于分析线程问题,例如cpu负载过高
相关参数
-F 转储线程栈会挂起进程
-m 打印两个栈的栈帧
-l 打印关于锁的额外信息
-h 帮助信息
- jmap:查看运行时内存分配情况,和堆内存转储,会导致stw(慎用)
相关参数
<none> 打印相关动态链接信息
-heap 打印堆的汇总信息
-histo[:live] 打印存活的对象信息,不知道子参数打印所有对象
-clstats 类加载器统计信息
-finalizerinfo 打印finalize状态的对象信息
-dump:<dump-options> 堆转储到文件 jmap -dump:live,format=b,file=heap.bin <pid>
-F 强制执行
-h | -help 帮助信息
-J<flag> 指定系统环境
- jcmd:包含大部分其它的命令,内存分配情况以及一些统计信息,同样会stw(慎用)
相关参数
jcmd pid help 查看相关java进程支持的命令
-f 从文件读取命令执行
-l 列出本机的所有jvm进程
-h 帮助
jcmd 19912 help
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory 本地内存
VM.check_commercial_features 商业特征检查
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats 类加载器统计信息
GC.rotate_log
Thread.print 打印线程信息
GC.class_stats GC类统计信息
GC.class_histogram 类统计图信息
GC.heap_dump 堆转储
GC.finalizer_info finalized状态的对象信息
GC.heap_info 堆信息
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help
- jps:查看java进程相关信息
相关参数
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
- jstat:统计运行时的一些信息
相关参数
-gc:统计gc时heap信息,以使用空间字节数表示
-gcutil:统计gc时,heap情况,以使用空间的百分比表示
-class:统计class loader行为信息
-compile:统计编译行为信息
-gccapacity:统计不同generations(新生代,老年代,持久代)的 heap容量情况
-gccause:统计引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年代的情况
-gcoldcapacity:统计gc时,老年代heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
- jinfo:主要作用是实时查看和调整JVM配置参数数
相关参数
jinfo -flags pid 输出命令行属性
info -sysprops pid 输出系统属性
- jhat:生成网页分析报告
- jcosole: 可视化工具
- jvisualvm:可视化分析工具
阿里提供的arthas
以上工具除了arthas 能在生产环境使用之外,其它工具尽量不在生产使用。