`
iamzhongyong
  • 浏览: 806984 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【原】JDK自带分析问题工具

    博客分类:
  • java
 
阅读更多

    工欲善其事必先利其器,这里把jdk自带的工具熟悉一下,有问题能够直接拿过来用。

    JDK自带了几个比较实用的工具,这里汇总用法,主要是介绍一些参数的用法,排查问题的时候很有用的。

    常用的是后面三个,需要对于java的内存区域有一定的了解之后用起来会更加的心应手,需要了解java内存模型的可以参照一下我之前系的一篇简单的入门博客。

 

 


(1)jsp打印出java的进程号,类似于linux的ps,不是很常用,一般用linux的 ps -ef | grep java来代替

 

A. -q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数

 

B. -m 输出传递给main 方法的参数,在嵌入式jvm上可能是null

 

C. -l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名

 

$ jps -l
5098 org.jboss.Main
13785 sun.tools.jps.Jps
 

D. -v 输出传递给JVM的参数

$ jps -v
13837 Jps
-Dapplication.home=/opt/taobao/install/jdk-1.6.0_17 -Xms8m
5098 Main
-Dprogram.name=run.sh -Xms768m -Xmx768m -XX:NewSize=320m -XX:MaxNewSize=320m
-XX:PermSize=96m
-XX:MaxPermSize=256m
-Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Djava.awt.headless=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=v012087.sqa.cm4 -XX:+UseCompressedOops -javaagent:/home/admin/depend/classAgent.jar -javaagent:/home/admin/logisticsmap/dtd/btrace/build/btrace-agent.jar=script=/home/admin/logisticsmap/dtd/btrace/build/TrackDTDXSDLoad.class,scriptOutputFile=/home/admin/logisticsmap/logs/dtdxsdloadstatus.log -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=/opt/taobao/jboss/lib/endorsed
 


(2)jmap dump出java内存的一些信息,用于分析内存的一些问题,常用

 

常用的三个参数

-dump:[live,]format=b,file=<filename>
dump出java heap的二进制信息到文件,如果加了live这个参数,则只是dump出正在存活的对象的信息,分析文件,可以使用jhat,但是用eclipse的mat更加方便
------------------------------------------------------------------------
-heap
打印java heap的统计信息,gc的使用情况,heap的配置等

------------------------------------------------------------------------
-histo[:live]
打印heap的统计信息,包括每个类,对象,内存。
 

例子:文件被重定向到heap.log这个文件,5098是java进程的端口号

$ jmap -dump:live,format=b,file=/home/admin/heap.log 5098

Dumping heap to /home/admin/heap.log ...
Heap dump file created

 

eclipse mat的下载地址是:http://www.eclipse.org/mat/downloads.php


(3)jstat 打印出java进程gc的情况,可以打印出内存区域各个区域的具体大小,也可以打印出统计数字

 

A ) -gc  查看内存区域的整体情况

 

 

$ jstat -gc 5098 1000 10
5098为java的进程ID,1000为每隔1s打印一次,10为连续打印10次
 S0C      S1C     S0U    S1U      EC       EU                   OC         OU               PC        PU      YGC     YGCT    FGC    FGCT     GCT   
6976.0 6528.0  0.0    0.0   314176.0 230746.6  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 230746.6  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 230746.6  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 230831.1  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 230831.1  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 231202.0  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 231202.0  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 231202.1  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 231202.1  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058
6976.0 6528.0  0.0    0.0   314176.0 231243.4  458752.0   59883.9   98304.0 84466.1     48    0.894  29     10.165   11.058

 

各个字段的解释
S0C   Current survivor(存活的) space 0 capacity (KB).
EC     Current eden space capacity (KB).
EU     Eden space utilization (KB).
OC    Current old space capacity (KB).
OU    Old space utilization (KB).
PC     Current permanent space capacity (KB).
PU     Permanent space utilization (KB).
YGC   Number of young generation GC Events.
YGCT Young generation garbage collection time.
FGC   Number of full GC events.
FGCT  Full garbage collection time.
GCT   Total garbage collection time.
 

 

 

B ) -gcutil  查看内存区域的使用占比情况


$ jstat -gcutil 5098 1000 10
S0    S1       E        O       P    YGC YGCT FGC FGCT      GCT
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.87 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.87 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
 
S0  — Heap上的 Survivor space 0 区已使用空间的百分比 
S1  — Heap上的 Survivor space 1 区已使用空间的百分比 
E   — Heap上的 Eden space 区已使用空间的百分比 
O   — Heap上的 Old space 区已使用空间的百分比 
P   — Perm space 区已使用空间的百分比 
YGC — 从应用程序启动到采样时发生 Young GC 的次数 
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒) 
FGC — 从应用程序启动到采样时发生 Full GC 的次数 
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒) 
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

 

其他一些不是很常用的参数:

 

-class:统计class loader行为信息
-compile:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的情况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap情况

 

 


(4)jstack 打印出java中线程的情况,用于分析线程相关问题非常有用

 

 

 
-F 强制进行线程dump,当执行jstack pid没有反应的时候,可以执行此命令

-m 打印java线程还有本地线程

-l 打印线程的锁附加信息

 

 

例子:查看特定java线程的情况:

 

(一)通过top命令,查看消耗内存较高的线程的id,

运行top,shift+h来显示所有进程的信息,包含进程中线程的情况,从中找出占用内存最大的那个java线程。

也可直接运行:top -H -p  pid  来显示java进程中的各个线程的情况

 

(二)进制间的转换:

printf '0x%x\n'   pid

获取线程ID的另外一中展现形式

 

(三)dump线程,然后搜搜索线程为上述ID的线程的信息

 

线程的各个状态截图在这里

 

 

分享到:
评论

相关推荐

    jdk_api_1_6中文版

    5. `jconsole`:JDK自带的JVM监控工具,提供性能分析和内存管理等功能。 6. `jmap`:用于查看堆内存详细信息,辅助诊断内存泄漏问题。 四、JDK 1.6的开发实践 在实际开发中,JDK 1.6广泛应用于企业级应用、桌面...

    n年前写的jdk测试工具,与大家分享

    标题中的“n年前写的jdk测试工具”提示我们这是一个关于Java Development Kit (JDK) 的测试工具,由作者在若干年前编写。JDK是Java编程语言的核心组件,它包含了一个Java运行环境、编译器(javac)和其他工具,用于...

    unity2021.3 安卓JDK,SDK

    5. **优化性能**:使用Unity的Profiler工具分析安卓设备上的性能,优化代码和资源,提高运行效率。 此外,Unity2021.3版本可能还针对安卓平台做了其他的优化和改进,例如更好的GPU支持、更快的构建速度以及对最新...

    最新版windows jdk-16.0.1_windows-x64_bin.zip

    2. 调试工具:JDK自带的JVisualVM和JConsole等工具,可以帮助开发者进行性能分析和诊断问题。 3. Java编译器Javac:JDK 16.0.1的Javac编译器支持新的语言特性,如Records,使得开发更加便捷。 六、性能优化 1. ...

    内存泄露方面分析文档

    除了IBM的工具和文档,还有其他技术资源如Sun(现为Oracle)的JDK自带的VisualVM和jconsole,以及其他第三方工具如Eclipse Memory Analyzer (MAT),JProfiler和YourKit等,这些工具均可以用来监控Java应用的内存使用...

    Java反编译工具(附操作教程)

    `javap`是JDK自带的一个命令行工具,它能够显示类、接口和它们的属性、方法的详细信息。但这只是一个基本的反编译器,主要用于教学和调试,它无法提供完整的源代码。 更强大的Java反编译工具包括JD-GUI、Procyon、...

    Java深度历险.pdf

    通常,JDK安装目录下的JRE用于运行JDK自带的工具,而`program files`下的JRE则用于运行用户编写的Java程序。不过,这两套JRE都可以用来运行用户编写的Java程序,只不过默认情况下JDK工具会使用自身目录下的JRE。 ##...

    网络抓包java源码,可实现抓包、分析和还原

    在Java中,我们可以利用JDK自带的`java.net.Socket`类或者第三方库如`libpcap`的Java封装(例如`jnetpcap`库)来实现这一功能。 1. **使用Java原生API抓包** Java原生API虽然不直接支持网络抓包,但可以通过创建...

    apktool(2.2.4-2.9.3)打包

    5. **签名APK**:打包后的APK需要签名才能在设备上安装,可以使用JDK自带的`jarsigner`工具进行签名。 6. **安装APK**:最后,使用`adb install &lt;signed APK&gt;`命令,通过Android Debug Bridge(ADB)将签名后的APK...

    JVM堆模型

    1. **JDK自带工具说明.doc**:这个文档可能包含了JDK提供的各种工具,如`jps`(Java进程查看器)、`jstat`(统计JVM各种运行时数据)、`jinfo`(配置JVM参数)、`jmap`(映射内存到文件)、`jhat`(分析堆转储文件)...

    apktool android工具

    Apktool不直接提供签名功能,但你可以使用JDK自带的`jarsigner`工具进行签名。 ### 三、注意事项 1. **版权问题**:在使用Apktool进行学习和研究时,应尊重原作者的版权,不得用于非法目的。 2. **版本兼容性**:...

    Android测试工具Monkey学习笔记

    Monkey是Android系统自带的一款强大的自动化测试工具,常被用于产品的稳定性测试。该工具能够模拟各种用户行为,如按键输入、触摸屏幕、手势操作等,以此来检测Android应用在面对各种非预期用户行为时的表现。Monkey...

    VisualGC.zip

    jvisualvm是Java Development Kit(JDK)自带的一款多合一的性能分析工具,集成了诸如监视、诊断、采样、线程分析等功能,能够帮助开发者对运行中的Java应用程序进行实时监控和问题排查。 VisualGC是jvisualvm的一...

    jd-gui.rar

    在理解Java字节码和反编译技术的同时,开发者还应了解JDK自带的`javap`命令行工具,它提供了更基础的字节码查看功能。尽管不如JD-GUI直观,但`javap`在某些场景下也能提供必要的信息,例如类的公共成员、常量池和...

    理解JAVA虚拟机-内存管理、垃圾收集器.pptx

    2. **jvisualvm**:JDK自带的可视化工具,可以监控JVM的多种指标。 3. **MAT (Memory Analyzer Tool)**:Eclipse插件,用于分析heap dump文件,找出内存泄漏等问题。 在实际应用中,频繁的Full GC、不合理的内存...

    Eclips查看Class文件插件

    jad是Java反汇编器(Java Disassembler),它是JDK自带的一个工具,用于将字节码转换为人类可读的汇编语言形式。在Eclipse中查看Class文件时,jad起到了关键作用,它能帮助开发者解析二进制Class文件的内容,了解...

    深入Java虚拟机(原书第二版)Bill Venners 著

    书中会介绍如何使用JDK自带的工具如jconsole、jmap、jhat等进行监控和诊断。 7. **异常处理** JVM对异常处理有一套完整的机制,包括异常的抛出、捕获和传播。理解这一机制可以帮助编写更加健壮的代码。 8. **多...

    jvm原理机器调优-jvm.zip

    2. **jvisualvm**:更强大的分析工具,可以进行CPU、内存、线程剖析,以及远程连接。 3. **jmap**:用于生成堆转储文件,便于分析内存占用。 4. **jhat**:分析堆转储文件,查找内存泄漏。 5. **jstack**:打印线程...

    android NDK

    实例分析与入门实例:NDK自带实例分析 - **实例选择**:介绍了NDK自带的一些典型示例。 - **代码解析**:对这些示例代码进行了深入的分析和解释。 - **实践操作**:提供了实际操作步骤,帮助开发者理解和掌握NDK的...

    java语言程序设计进阶篇第十版PDF

    书中可能会涉及内存模型、垃圾回收、类加载机制以及如何使用JDK自带的JConsole、VisualVM等工具进行性能监控和调优。 8. **Java EE与Web开发**:虽然标题并未明确提及,但作为进阶篇,可能会介绍Java企业版(Java ...

Global site tag (gtag.js) - Google Analytics