java虚拟机故障处理工具

本文介绍Java开发人员在JDK安装的bin目录下可以找到的各种工具,包括jps、jstat、jinfo、jmap、jhat和jstack。这些工具主要用于监视虚拟机和故障处理,例如jps用于显示所有HotSpot虚拟机进程,jstat用于收集虚拟机运行数据,jinfo用于显示虚拟机配置信息,jmap用于生成内存存储快照,jhat用于分析heapdump文件,jstack用于显示虚拟机的线程快照。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:##概述给系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。java开发人员可以在jdk安装的bin目录下找到除了java,javac以外的其他命令。这些命令主要是一些用于监视虚拟机和故障处理的工具。这些工具包括:|名称|主要作用||—|---||jps|JVMprocessStatusTool,显示指定系统内所有的HotSpot虚拟机进程。通常是本地主机||jstat|JVMStatisticsMonitoringTool,用于

概述

给系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。
java开发人员可以在jdk安装的bin目录下找到除了java,javac以外的其他命令。这些命令主要是一些用于监视虚拟机和故障处理的工具。这些工具包括:

名称主要作用
jpsJVM process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程。通常是本地主机
jstatJVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据
jinfoConfiguration Info for java, 显示虚拟机配置信息
jmapMemory Map for Java, 生成虚拟机的内存存储快照(heapdump文件)
jhatJVM Heap Dump Browser, 用于分析heapdump文件,它建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstackStack Trace for Java, 显示虚拟机的线程快照

jps:虚拟机进程状况工具

jps的功能和unix/liunx中的ps命令是类似。只不过它是打印出正在运行的虚拟机进程,并显示虚拟机执行主类的名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier, LVMID,通常是系统进程ID)。
jps命令格式:

jps [options] [hostId]

jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostId为RMI注册表中注册的主机名称。
jps其他常用选项:

-q 只输出LVMID, 省略主类的名称;
-m 输出虚拟机进程启动时候传递给主类main()函数的参数;
-l 输出主类的全称,如果进程执行的是jar包,输出jar路径;
-v 输出虚拟机进程启动时候JVM参数。

jps命令样例:

[ aliyunzixun@xxx.com ~]# jps -l
3914 org.zhangyoubao.payservice.App
12180 sun.tools.jps.Jps
6913 org.zhangyoubao.userprofiler.App

jstat:虚拟机统计信息监视工具

jstat是用于监视虚拟机各种运行状态信息的工具。它可以显示本地或远程虚拟机进程中类load,内存gc.jit等运行参数。
jstat命令格式:

jstat [option vmid [interval [s|ms] [count]]]

interval和count代表查询间隔和次数。如果省略这两个参数,说明只查询一次。
jstat其他常用选项:

-class 监视类load/unload数量、总空间已经装载时间;
-compiler输出JIT编译器编译过的方法、耗时等信息;
-printcompilation 输出已经被JIT编译的方法;
-gc 监视java堆状况;
-gccapacity监视内容与-gc基本相同,但输出关注java各个区域的最大/最小空间;
-gcutil监视内容与-gc基本相同,但输出关注已使用空间占用百分百比;
-gccause 与-gcutil功能一样,额外输出导致上一次GC产生原因;
-gcnew 监视新生代GC状况;
-gcnewcapacity监视新生代,输出同-gccapacity;
-gcold 监视老年代GC状况;
-gcoldcapacity监视老年代,输出同-gccapacity;
-gcpermcapactiy 监视永久代(代码区),输出同-gccapacity;

jstat命令样例:

[ aliyunzixun@xxx.com ~]# jstat -gc 6913
S0CS1CS0US1UECEU OCOUPC PUYGC YGCTFGCFGCT GCT
34048.0 34048.00.0 3217.8 272640.0 171092.7683264.0 168910.746872.0 28031.237857380.644693.447384.091

jinfo:Java配置信息工具

jinfo的作用是实时的查看和调整虚拟机各项参数。
jinfo命令格式:

jinfo [option] pid

jinfo其他常用选项:

-flag name=value 修改参数
-flag name 参数参数

jinfo命令样例:

[ aliyunzixun@xxx.com ~]# jinfo 6913
Attaching to process ID 6913, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.91-b01
Java System Properties:
...
VM Flags:
-Xms1000m -Xmx1000m -Dconf=/usr/local/user_profiler/conf -Dserver.root=/usr/local/user_profiler -Dcom.sun.management.jmxremote.port=7003 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC

jmap:java内存映射工具

jmap命令可以用于生产堆存储快照(dump文件)。它还可以查下finalize队列(自我拯救队列)、java堆和代码区的详细信息。
jmap命令格式:

jmap [option] vmid

jmap其他常用选项:

-dump 生成java堆存储快照。格式:-dump:[live,]format=b,file= ;
-finalizerinfo 显示F-Queue中等待Finalizer现象执行finalize方法的对象;
-heap 显示java堆详细信息,如使用哪种回收器、参数配置、分代状况等待;
-histo显示堆中对象统计信息,包括类、实例书、合计容量;
-permstat以ClassLoader为统计入口显示永久代内存信息;
-F当虚拟机进程堆-dump选项没有响应时候,可以使用这个选项强制生成dump快照。

jmap命令样例:

[ aliyunzixun@xxx.com ~]# jmap -histo 6913|head -20
num #instances#bytesclass name
----------------------------------------------
1:1864966113459432[C
2: 20184649201192[B
3:159706538329560java.lang.String
4: 11747715037056org.zhangyoubao.thriftdef.UserUsefulInfo
5:4710411072048[I
6: 268631 8596192java.util.HashMap$Entry
7:48812 7451760
8: 100683 6443712com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty
9:48812 6257856
10: 4230 5271640
11: 159491 5103712java.util.Hashtable$Entry
12: 120226 4809040org.zhangyoubao.common.cache.adv.Node
13: 127027 4064864java.util.concurrent.ConcurrentHashMap$HashEntry
14: 230433 3686928java.lang.Integer
15: 3765 3049824
16:20917 3012048com.mysql.jdbc.Field
17: 4230 2943840

其中[C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][]

jhat: 虚拟机堆转存快照分析工具

jhat 命令用于与jmap搭配使用,用来分析jmap生成的dump文件。jhat内置了一个微型的HTTP/HTML服务器,生成的dump文件的分析结果后,可以在浏览器查看。
jhat命令格式:

jmap filename

jhat命令样例:

[ aliyunzixun@xxx.com ~]# jhat html_intercept_server.dump
Reading from html_intercept_server.dump...
Dump file created Wed Nov 23 13:05:33 CST 2016
Snapshot read, resolving...
Resolving 203681 objects...
Chasing references, expect 40 dots........................................
Eliminating duplicate references........................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

jstack:java线程堆栈跟踪工具

jstack用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机每一条线程正在执行的方法堆栈计划,生成线程快照的主要目的是定位线程长时间停顿的原因。在线程停顿的时候,通过jstack来查看没有响应的线程在后台做些什么事情,或者等待着什么资源。
jstack命令格式:

jstack [option] vmid

jstack其他选项:

-F 当正常输出的请求不被响应的时候,强制输出线程堆栈;
-l 除了显示堆栈外,显示关于锁的附加信息;
-m 如果调用本地方法,可以显示C/C++的堆栈。

jstack命令样例:

[ aliyunzixun@xxx.com ~]# jstack 29577|head -20
2016-11-23 12:58:23
Full thread dump OpenJDK Server VM (24.91-b01 mixed mode):
"pool-1-thread-7261" prio=10 tid=0x0893a400 nid=0x6b0d waiting on condition [0x652ad000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for<0x75b5b400> (a java.util.concurrent.SynchronousQueue$TransferStack)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
"service_hot_lscs-0" daemon prio=10 tid=0x6982dc00 nid=0x6aeb waiting on condition [0x64ce1000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.zhangyoubao.video.client.runner.SimpleVideoRunner.doWork(SimpleVideoRunner.java:150)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值