jdk的bin目录下提供了很多jvm的性能监控工具,供我们使用。
jps (jvm Process Ststus Tool)。功能类似于ps ,列出正在运行的进程。并显示虚拟机主类main函数所在类。
jsp -q 只输出LVMID
jps -m 输出jvm启动时,传递给主类main()函数的参数,主要是一些jvm配置信息。
jps -l 输出main函数的全名,如果是jar 输出jar的路径
jps -v 输出jvm进程启动时,jvm参数。我们可以用它来查看修改过的jvm参数是否生效。
jstat监视jvm虚拟机各种运行状态的命令行工具。可以显示类装载,内存,垃圾手机,jit编译等运行数据。
命令格式 jstat -gc 5000 200 5 含义:每200毫秒查询一次线程为5000的垃圾收集情况连续查询五次。
-class 监视类装载、卸载数量、总空间以及类加载耗时。
-gc 监视eden区,两个survivor区、老年代,方法区实现的元空间或者是永久带容量,已使用情况,已经ygc次数,耗时,fgc次数,耗时等信息。
-gccapacity 类似-gc偏向java堆内存
-gcutil 类似gc 偏向于已使用空间
-gccause 类似-gcutil 会输出上一次gc产生原因
-gcnew 新生代信息
-gcnewcapacity 新生代关注最大最小空间
-gcold 老年代
-gcmetacapacity元空间 (jdk1.8)
-gcpermcapacity 永久带(jdk1.7以前包括1.7)
-compiler JIT编译器编译过的方法耗时等
-printcompilation 输出已经被JIT编译的方法
jinfo java配置信息查询工具
jinfo -flags name pid 输出指定name的配置信息。 jinfo pid 会输出所有信息。
格式:jmap option vmid
-dump 生成java堆快照。jmap -dump:format=b,file=a.bin 19992 为线程19992的jvm 生成堆快照,文件名为a.bin
-finalizerinfo 显示F-Queue中等待执行Finalizer线程执行finalized方法的对象,只在Linux/solaris平台下有效。f-queue,对象被回收前,最后的起死回生的队列。执行finalized后,如果存在引用,则不被回收。
-heap 显示堆详细信息
-histo 显示堆中对象统计信息
-permstat 显示永久代内存状态(jdk1.7之前)
-F 强制生成快照
当线程出现停顿,未响应时可以查看虚拟机到底在后台在做什么。可以用来定位死锁,或者死循环位置,
格式jstack option vmid
-F 当正常输出的请求不被响应,强制输出线程的堆栈信息。
-l 除堆栈外显示锁的附加信息
-m 如果调用到本地方法native方法,可以显示c/c++的堆栈。