JAVA分析命令:jps、jstack、jmap、jhat
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相关推荐
- JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
2019独角兽企业重金招聘Python工程师标准>>> 前提概要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
2019独角兽企业重金招聘Python工程师标准>>> 文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我 ...
- GC调优基础知识之工具篇--jdk为我们提供的命令行命令 jps,jstat,jmap,jinfo,jstat,jstack,jhat 等
一. JDK为我们提供的工具: 在Windows中对于这些命令的支持是源自JDK -->bin下面的.exe可执行文件的支持. 在Linux中对于这些命令的支持是源自JDK --&g ...
- java jhat_java自带命令行工具(jmap,jhat,jinfo)
(1)JMAP 1.作用 打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息. 2.使用jmap [ options ] pid jmap [ options ] execut ...
- java 分析命令_javap命令解析
一.javap是什么? javap是将字节码进行反编译(与javac对应),可以查看java编译器为我们生成的字节码.通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作. 二.javap ...
- java 内存溢出 jstack,Java——命令jps、jstat、jmap、jstack、jhat、jinfo
JAVA_HOME/bin/ 目录下jdk提供了很多自带工具,下面以tomcat下的web项目为例.如果感觉输出内容太多可以使用 xxx | head -n 20 显示输出内容的头20行. jps j ...
- Java——命令jps、jstat、jmap、jstack、jhat、jinfo
JAVA_HOME/bin/ 目录下jdk提供了很多自带工具,下面以tomcat下的web项目为例.如果感觉输出内容太多可以使用 xxx | head -n 20 显示输出内容的头20行. jps j ...
- 虚拟机的性能监控与故障处理——jps,jstat,jinfo,jmap,jhat,jstack
Java虚拟机实现了内存自动分配,垃圾回收机制,但是这一过程,究竟什么时候执行,执行到什么地步,却需要jdk提供的一些工具来监控. 比如jps,jstat,jinfo,jmap,jhat,jstack ...
- jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息
1.查看磁盘还剩多少空间,使用df命令(查看Linux版本:lsb_release -a,uname -a) 2.当前文件夹下的磁盘使用情况:(du --max-depth=1 -h后面没有显示跟路径 ...
最新文章
- 坑爹的BufferManager
- 经纬度坐标转换xy坐标 python_在Python中使用NewtonRaphson迭代将经纬度转换为xy Mollweide地图坐标...
- AI综述专栏 | 基于深度学习的目标检测算法综述
- python中若干关于类的问题
- APM之基于事件的异步模式(EAP)-2
- request.getServletPath()和request.getPathInfo()用法
- 利用FreeNas创建AFP共享
- matlab swt函数,matlab swt 函数出错
- 来电语音播报软件下载apk_消息语音播报app下载-消息语音播报安卓版 v1.0.1 - 安下载...
- pwn环境搭建_[原创]CTF_Pwn环境搭建
- 全网首发:FreeSwitch BANNER支持中文
- Web漏洞扫描工具AppScan v10.0.0的下载安装与使用
- Github上被疯传的Redis实战文档也太香了
- 新手免费搭建个人网站
- Nlite后期处理技术小结(第三次更新...全文完)(by bluewind)
- OpenCV—python 图像矫正(基于傅里叶变换—基于透视变换)
- 名帖269 董其昌 行书临《颜真卿裴将军诗卷》
- 解读蔚来Q3财报:亏损额度收窄 蔚来汽车幸运的软着陆?
- 江苏华西村海洋工程服务有限公司-船讯网
- python使用Tesseract,pytesseract图片处理识别(1)