JAVA分析命令:jps、jstack、jmap、jhat

jps

用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。使用jps时,不需要传递进程号做为参数。

Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstat服务,以及RMI注及服务,不过常用都是对本对的JAVA进程的查看。

命令格式

jps [ options ] [ hostid ]

常用参数说明

-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。

-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。

-v 输出传给JVM的参数。

使用示例

blue@blue-pc:~$ jps
8710 Jps
5661 Bootstrapblue@blue-pc:~$ jps -ml
5661 org.apache.catalina.startup.Bootstrap start
8724 sun.tools.jps.Jps -mlblue@blue-pc:~$ jps -mlv
5661 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/home/blue/apache-tomcat-7.0.39/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/blue/apache-tomcat-7.0.39/endorsed -Dcatalina.base=/home/blue/apache-tomcat-7.0.39 -Dcatalina.home=/home/blue/apache-tomcat-7.0.39 -Djava.io.tmpdir=/home/blue/apache-tomcat-7.0.39/temp
2491  -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx384m
8738 sun.tools.jps.Jps -mlv -Dapplication.home=/usr/local/jdk1.6.0_35 -Xms8m
2967  -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx512m

前面的数字是jvm的进程id,后面是jvm的类启动信息。

jstack

如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

命令格式

$jstack [ option ] pid

$jstack [ option ] executable core

$jstack [ option ] [server-id@]remote-hostname-or-IP

常用参数说明

OPTIONS

-F jstack [-l] pid无法响应时,强制打印堆栈

-l l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m 混合模式输出(包括java和本地c/c++片段)堆栈。

pid: java应用程序的进程号,一般可以通过jps来获得;

executable:产生core dump的java可执行程序;

core:打印出的core文件;

remote-hostname-or-ip:远程debug服务器的名称或IP;

server-id: 唯一id,假如一台主机上多个远程debug服务;

使用示例

blue@blue-pc:~$ jps -ml
5661 org.apache.catalina.startup.Bootstrap
blue@blue-pc:~$ jstack 5661
2013-04-16 21:09:27
Full thread dump Java HotSpot(TM) Server VM (20.10-b01 mixed mode):"Attach Listener" daemon prio=10 tid=0x70e95400 nid=0x2265 waiting on condition [0x00000000]java.lang.Thread.State: RUNNABLE"http-bio-8080-exec-20" daemon prio=10 tid=0x08a35800 nid=0x1d42 waiting on condition [0x70997000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x766a27b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)at java.lang.Thread.run(Thread.java:662)
........

PS:一般情况下,通过jstack输出的线程信息主要包括:jvm自身线程、用户线程等。其中jvm线程会在jvm启动时就会存在。对于用户线程则是在用户访问时才会生成。

jmap

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。

64位机上使用需要使用如下方式:

jmap -J-d64 -heap pid

命令格式

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [server-id@]remote-hostname-or-IP

参数说明

1)、options:

executable Java executable from which the core dump was produced.

(可能是产生core dump的java可执行程序)

core 将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务

2)、基本参数:

-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

-finalizerinfo 打印正等候回收的对象的信息.

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

-h | -help 打印辅助信息

-J 传递参数给jmap启动的jvm.

pid 需要被打印配相信息的java进程id

使用示例

查询jvm堆的概要信息

blue@blue-pc:~/apache-tomcat-7.0.39/conf$ jps -ml
9142 org.apache.catalina.startup.Bootstrap start
9168 sun.tools.jps.Jps -mlroot@blue-pc:/home/blue/apache-tomcat-7.0.39/conf# jmap -heap 9142
Attaching to process ID 9142, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.10-b01using thread-local object allocation.
Parallel GC with 4 thread(s)Heap Configuration:MinHeapFreeRatio = 40MaxHeapFreeRatio = 70MaxHeapSize      = 1031798784 (984.0MB)NewSize          = 1048576 (1.0MB)MaxNewSize       = 4294901760 (4095.9375MB)OldSize          = 4194304 (4.0MB)NewRatio         = 2SurvivorRatio    = 8PermSize         = 16777216 (16.0MB)MaxPermSize      = 67108864 (64.0MB)Heap Usage:
PS Young Generation
Eden Space:capacity = 16121856 (15.375MB)used     = 15074368 (14.37603759765625MB)free     = 1047488 (0.99896240234375MB)93.50268356199187% used
From Space:capacity = 2686976 (2.5625MB)used     = 2684584 (2.5602188110351562MB)free     = 2392 (0.00228118896484375MB)99.91097799161585% used
To Space:capacity = 2686976 (2.5625MB)used     = 0 (0.0MB)free     = 2686976 (2.5625MB)0.0% used
PS Old Generationcapacity = 42991616 (41.0MB)used     = 5071824 (4.8368682861328125MB)free     = 37919792 (36.16313171386719MB)11.797239722275153% used
PS Perm Generationcapacity = 16777216 (16.0MB)used     = 11304456 (10.780769348144531MB)free     = 5472760 (5.219230651855469MB)67.37980842590332% used

dump jvm内存信息

root@blue-pc:/home/blue/apache-tomcat-7.0.39/conf# jmap -F -dump:format=b,file=tomcat.bin 9142
Attaching to process ID 9142, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.10-b01
Dumping heap to tomcat.bin ...
Finding object size using Printezis bits and skipping over...
Heap dump file created

jhat

用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言

生成tomcat.bin dump文件后,使用jhat查看

root@blue-pc:/home/blue/apache-tomcat-7.0.39/conf# jhat tomcat.bin
.....
Started HTTP server on port 7000
Server is ready.

访问 http://localhost:7000,就可以查看详细的内存信息

有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:

jhat -J-Xmx512m <heap dump file>

转载来源:https://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024986.html

转载来源:http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024892.html

JAVA分析命令:jps、jstack、jmap、jhat相关推荐

  1. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...

    2019独角兽企业重金招聘Python工程师标准>>> 前提概要:         JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...

  2. jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

    2019独角兽企业重金招聘Python工程师标准>>> 文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我 ...

  3. GC调优基础知识之工具篇--jdk为我们提供的命令行命令 jps,jstat,jmap,jinfo,jstat,jstack,jhat 等

    一. JDK为我们提供的工具:    在Windows中对于这些命令的支持是源自JDK -->bin下面的.exe可执行文件的支持.    在Linux中对于这些命令的支持是源自JDK --&g ...

  4. java jhat_java自带命令行工具(jmap,jhat,jinfo)

    (1)JMAP 1.作用 打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息. 2.使用jmap [ options ] pid jmap [ options ] execut ...

  5. java 分析命令_javap命令解析

    一.javap是什么? javap是将字节码进行反编译(与javac对应),可以查看java编译器为我们生成的字节码.通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作. 二.javap ...

  6. java 内存溢出 jstack,Java——命令jps、jstat、jmap、jstack、jhat、jinfo

    JAVA_HOME/bin/ 目录下jdk提供了很多自带工具,下面以tomcat下的web项目为例.如果感觉输出内容太多可以使用 xxx | head -n 20 显示输出内容的头20行. jps j ...

  7. Java——命令jps、jstat、jmap、jstack、jhat、jinfo

    JAVA_HOME/bin/ 目录下jdk提供了很多自带工具,下面以tomcat下的web项目为例.如果感觉输出内容太多可以使用 xxx | head -n 20 显示输出内容的头20行. jps j ...

  8. 虚拟机的性能监控与故障处理——jps,jstat,jinfo,jmap,jhat,jstack

    Java虚拟机实现了内存自动分配,垃圾回收机制,但是这一过程,究竟什么时候执行,执行到什么地步,却需要jdk提供的一些工具来监控. 比如jps,jstat,jinfo,jmap,jhat,jstack ...

  9. jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息

    1.查看磁盘还剩多少空间,使用df命令(查看Linux版本:lsb_release -a,uname -a) 2.当前文件夹下的磁盘使用情况:(du --max-depth=1 -h后面没有显示跟路径 ...

最新文章

  1. 坑爹的BufferManager
  2. 经纬度坐标转换xy坐标 python_在Python中使用NewtonRaphson迭代将经纬度转换为xy Mollweide地图坐标...
  3. AI综述专栏 | 基于深度学习的目标检测算法综述
  4. python中若干关于类的问题
  5. APM之基于事件的异步模式(EAP)-2
  6. request.getServletPath()和request.getPathInfo()用法
  7. 利用FreeNas创建AFP共享
  8. matlab swt函数,matlab swt 函数出错
  9. 来电语音播报软件下载apk_消息语音播报app下载-消息语音播报安卓版 v1.0.1 - 安下载...
  10. pwn环境搭建_[原创]CTF_Pwn环境搭建
  11. 全网首发:FreeSwitch BANNER支持中文
  12. Web漏洞扫描工具AppScan v10.0.0的下载安装与使用
  13. Github上被疯传的Redis实战文档也太香了
  14. 新手免费搭建个人网站
  15. Nlite后期处理技术小结(第三次更新...全文完)(by bluewind)
  16. OpenCV—python 图像矫正(基于傅里叶变换—基于透视变换)
  17. 名帖269 董其昌 行书临《颜真卿裴将军诗卷》
  18. 解读蔚来Q3财报:亏损额度收窄 蔚来汽车幸运的软着陆?
  19. 江苏华西村海洋工程服务有限公司-船讯网
  20. python使用Tesseract,pytesseract图片处理识别(1)

热门文章

  1. Linux Shell脚本入门教程系列之(六)Shell数组
  2. Magento教程 17:Magento功能导览(1) 会员功能
  3. html5游戏制作入门系列教程(二)
  4. Swift中文教程(十四) 初始化
  5. Linux Shell高级技巧(五)
  6. win 7 或 mac 远程桌面到 ubuntu (ssh)
  7. SpringCloud项目总结
  8. Linux——alias 设置别名详解
  9. python中的编码问题
  10. Linux Ubuntu 安装 Matlab