深入理解java虚拟机的故障处理工具
作者:daisy 发布时间:2023-11-20 06:41:58
前言
本文主要给大家介绍的是java虚拟机的故障处理工具,文中提到这些工具包括:
名称 | 主要作用 |
jps | JVM process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程。通常是本地主机 |
jstat | JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 |
jinfo | Configuration Info for java, 显示虚拟机配置信息 |
jmap | Memory Map for Java, 生成虚拟机的内存存储快照(heapdump文件) |
jhat | JVM Heap Dump Browser, 用于分析heapdump文件,它建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果 |
jstack | Stack 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命令样例:
[root@localhost ~]# 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命令样例:
[root@localhost ~]# jstat -gc 6913
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
34048.0 34048.0 0.0 3217.8 272640.0 171092.7 683264.0 168910.7 46872.0 28031.2 37857 380.644 69 3.447 384.091
jinfo:Java配置信息工具
jinfo的作用是实时的查看和调整虚拟机各项参数。
jinfo命令格式:
jinfo [option] pid
jinfo其他常用选项:
-flag name=value 修改参数
-flag name 参数参数
jinfo命令样例:
[root@localhost ~]# 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=<filename>;
-finalizerinfo 显示F-Queue中等待Finalizer现象执行finalize方法的对象;
-heap 显示java堆详细信息,如使用哪种回收器、参数配置、分代状况等待;
-histo 显示堆中对象统计信息,包括类、实例书、合计容量;
-permstat 以ClassLoader为统计入口显示永久代内存信息;
-F 当虚拟机进程堆-dump选项没有响应时候,可以使用这个选项强制生成dump快照。
jmap命令样例:
[root@localhost ~]# jmap -histo 6913|head -20
num #instances #bytes class name
----------------------------------------------
1: 1864966 113459432 [C
2: 201846 49201192 [B
3: 1597065 38329560 java.lang.String
4: 117477 15037056 org.zhangyoubao.thriftdef.UserUsefulInfo
5: 47104 11072048 [I
6: 268631 8596192 java.util.HashMap$Entry
7: 48812 7451760 <constMethodKlass>
8: 100683 6443712 com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty
9: 48812 6257856 <methodKlass>
10: 4230 5271640 <constantPoolKlass>
11: 159491 5103712 java.util.Hashtable$Entry
12: 120226 4809040 org.zhangyoubao.common.cache.adv.Node
13: 127027 4064864 java.util.concurrent.ConcurrentHashMap$HashEntry
14: 230433 3686928 java.lang.Integer
15: 3765 3049824 <constantPoolCacheKlass>
16: 20917 3012048 com.mysql.jdbc.Field
17: 4230 2943840 <instanceKlassKlass>
其中[C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][]
。
jhat: 虚拟机堆转存快照分析工具
jhat 命令用于与jmap搭配使用,用来分析jmap生成的dump文件。jhat内置了一个微型的HTTP/HTML服务器,生成的dump文件的分析结果后,可以在浏览器查看。
jhat命令格式:
jmap filename
jhat命令样例:
[root@localhost ~]# 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命令样例:
[root@localhost ~]# 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)
来源:http://blog.csdn.net/pursuing0my0dream/article/details/53303964


猜你喜欢
- 前言公司的邮件系统用的是 * 的 Lotus notes, 你敢信?最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前
- springcloud集成nacos遇到的问题1.获取不到配置文件信息有时候新建了配置文件后浏览器访问发现获取不到里面的值,原来spring
- 快速排序是应用最广泛的排序算法,流行的原因是它实现简单,适用于各种不同情况的输入数据且在一般情况下比其他排序都快得多。快速排序是原地排序(只
- 编辑Word文档时,我们有时会突然想增加一段新内容;而将word文档给他人浏览时,有些信息我们是不想让他人看到的。那么如何运用C#编程的方式
- Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能Jenkins是基于Java开发的一种持续集成工具
- 本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下效果图:分析:左右两边可以
- 基于opencv的车道线检测,供大家参考,具体内容如下原理:算法基本思想说明:传统的车道线检测,多数是基于霍夫直线检测,其实这个里面有个很大
- 前言我们之前实现了打包发布NuGet,但是发布后的引用是公有的,谁都可以访问,显然这种方式是不可取的。命令版本:10分钟学会Visual S
- 目录第一种第二种第三种随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:第一种:new Rand
- 本文实例讲述了WinForm绘制圆角的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Co
- 一、输入映射parameterType指定输入参数的Java类型,可以使用别名或者类的全限定名。它可以接收简单类型、POJO、H
- 过滤器、 * 、 * 概念概念1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,可以动态生
- 1.阻塞I/O模型阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞。阻塞IO模型的工作流程为:1.1在用户线程发出IO请求之后,内
- 本文介绍了ImageView 实现Android colorPikcer 选择器的示例代码,分享给大家,具体如下:Android color
- notification是一种让你的应用程序在没有开启情况下或在后台运行警示用户。它是看不见的程序组件(Broadcast Receiver
- 这篇文章主要介绍了JAVA内存溢出解决方案图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 本文实例讲述了Jexcel实现按一定规则分割excel文件的方法。分享给大家供大家参考。具体如下:现有一个excel文档,需要读取它并按照一
- 问题项目是springcloud项目,在maven install某一个项目时报错:程序包com.example.commons.appli
- 一、了解Spring自动装配的方式采用传统的XML方式配置Bean组件的关键代码如下所示<bean id="userMapp
- 项目效果实现代码using System;namespace 飞行棋项目{ class Program