jdk自带常用命令行工具使用
转自:http://blog.csdn.net/winwill2012/article/details/46364923
jps命令使用
jps命令类似于Linux下的ps命令,用于列出当前正在运行的所有Java进程。
基本用法
直接运行不加任何参数就能列出所有java进程的pid和类的短名称。例如:
常用参数
-q参数
-q可以指定jps只列出pid,而不输出类的短名称,例如:
-m参数
-m参数可以用于列出传递给java进程主函数的参数,例如:
这里可以看到传递给jps(jps本身也是java进程)进程的参数就是-m
-l参数
-l参数用于输出主类的完整路径,例如:
-v参数
-v参数可以列出传递给java虚拟机的参数,例如:
jstat命令使用
概述
jstat是一个可以用于观察Java应用程序运行时相关信息的工具,功能非常强大,可以通过它查看堆信息的详细情况。
基本用法
jstat命令的基本使用语法如下:
jstat -option [-t] [-h] pid [interval] [count]
选项option可以由以下值构成。
-class:显示ClassLoader的相关信息。
-compiler:显示JIT编译的相关信息。
-gc:显示与gc相关的堆信息。
-gccapacity:显示各个代的容量及使用情况。
-gccause:显示垃圾回收的相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因。
-gcnew:显示新生代信息。
-gcnewcapacity:显示新生代大小与使用情况。
-gcold:显示老生代和永久代的信息。
-gcoldcapacity:显示老年代的大小。
-gcpermcapacity:显示永久代的大小。
-gcutil:显示垃圾收集信息。
-printcompilation:输出JIT编译的方法信息。
-t参数可以在输出信息前面加上一个Timestamp列,显示程序运行的时间。
-h参数可以在周期性的数据输出时,输出多少行数据后,跟着输出一个表头信息。
interval参数用于指定输出统计数据的周期,单位为毫秒(ms)。
count参数用于指定一共输出多少次数据。
详细使用
-class使用
下面命令输出pid为2500这个进程的ClassLoader相关信息,每秒统计一次信息,一共输出两次。
Loaded表示载入的类的数量,第一个Bytes表示载入的类的合计大小,Unloaded表示卸载的类数量,第二个Bytes表示卸载的类的合计大小,Time表示加载和卸载类花的总的时间。
-compiler使用
下面的命令查看JIT编译的信息:
Compiled表示编译任务执行的次数,Failed表示编译失败的次数,Invalid表示编译不可用的次数,Time表示编译的总耗时,FailedType表示最后一次编译的类型,FailedMethod表示最后一次编译失败的类名和方法名。
-gc使用
下面的命令显示与gc相关的堆信息的输出:
S0C:s0(from)的大小(KB)
S1C:s1(from)的大小(KB)
S0U:s0(from)已使用的空间(KB)
S1U:s1(from)已经使用的空间(KB)
EC:eden区的大小(KB)
EU:eden区已经使用的空间(KB)
OC:老年代大小(KB)
OU:老年代已经使用的空间(KB)
PC:永久区大小(KB)
PU:永久区已经使用的空间(KB)
YGC:新生代gc次数
YGCT:新生代gc耗时
FGC:Full gc次数
FGCT:Full gc耗时
GCT:gc总耗时
-gccapacity使用
下面的命令显示了各个代的信息,与-gc相比,它不仅输出了各个代的当前大小,还输出了各个代的最大值与最小值:
* NGCMN:新生代最小值(KB)
* NGCMX:新生代最大值(KB)
* NGC:当前新生代大小(KB)
* OGCMN:老年大最小值(KB)
* OGCMX:老年代最大值(KB)
* OGC:当前老年代大小(KB)
* PGCMN:永久代最小值(KB)
* PGCMX:永久代最大值(KB)
-gccause使用
下面命令显示最近一次gc的原因,以及当前gc的原因:
LGCC:上次gc的原因,从图中可以看到上次gc的原因是Allocation Failure
GCC:当前gc的原因,图中当前没有gc
-gcnew使用
下面的命令显示新生代的详细信息:
* TT:新生代对象晋升到老年代对象的年龄。
* MTT:新生代对象晋升到老年代对象的年龄的最大值。
* DSS:所需的Survivor区的大小。
-gcnewcapacity使用
下面的命令详细输出了新生代各个区的大小信息:
* S0CMX:s0区的最大值(KB)
* S1CMX:s1区的最大值(KB)
* ECMX:eden区的最大值(KB)
-gcold使用
下面的命令显示老年代gc概况:
-gcoldcapacity使用
下面的命令用于显示老年代的容量信息:
-gcpermcapacity使用
下面的命令用于显示永久区的使用情况:
jinfo命令使用
概述
jinfo可以用来查看正在运行的Java运用程序的扩展参数,甚至支持在运行时动态地更改部分参数,他的基本使用语法如下:
jinfo -< option > < pid >
其中option可以为以下信息:
* -flag< name >: 打印指定java虚拟机的参数值。
* -flag [+|-]< name >:设置或取消指定java虚拟机参数的布尔值。
* -flag < name >=< value >:设置指定java虚拟机的参数的值。
使用示例
下面的命令显示了新生代对象晋升到老年代对象的最大年龄。在运行程序运行时并没有指定这个参数,但是通过jinfo,可以查看这个参数的当前的值。
下面的命令显示是否打印gc详细信息:
下面的命令在运用程序运行时动态打开打印详细gc信息开关:
注意事项
jinfo虽然可以在java程序运行时动态地修改虚拟机参数,但并不是所有的参数都支持动态修改。
jmap命令使用
概述
jmap是一个多功能的命令。它可以生成Java程序的堆dump文件,也可以查看堆内对象实例的统计信息,查看ClassLoader的信息以及Finalizer队列。
使用示例
导出对象统计信息
下面的命令生成PID为2500的java成粗的对象的统计信息,并输出到out.txt文件中:
[qifuguang@winwill~]$ jmap -histo 2500 > out.txt [qifuguang@winwill~]$[qifuguang@winwill~]$[qifuguang@winwill~]$[qifuguang@winwill~]$[qifuguang@winwill~]$123456123456
生成的文件如下:
从文件中可以看到,统计信息显示了内存中实例的数量和合计。
导出程序堆快照
下面的命令导出PID为2500的java程序当前的堆快照:
[qifuguang@winwill~]$ jmap -dump:format=b,file=dump.bin 2500Dumping heap to /home/qifuguang/dump.bin ...Heap dump file created123123
该命令成功地将运用程序的当前的堆快照导出到了dump.bin文件,之后可以使用Visual VM,MAT等工具分析对快照文件。
查看Finalizer队列
下面的命令查看虚拟机Finalizer队列的信息:
从图中可以看到,队列中堆积了大量的TestFinalizer$LY对象实例,还有其他一些对象。
查看ClassLoader信息
下面的命令显示了虚拟机当前的ClassLoader信息:
从图中可以看到,当前虚拟机一共有3个ClassLoader,bootstrap加载了492个对象,对象总大小为943655byte,同时还显示了各个ClassLoader之间的父子关系。
jhat命令使用
概述
jhat(Java Head Analyse Tool)是jdk自带的用来分析Java堆快照的工具,具体的使用方法是:
jhat dump_file_name
使用示例
在此以前文dump出来的文件(dump.bin)为例,演示怎么使用jhat分析堆文件。
上图中使用jhat命令打开了之前dump出来的堆快照文件,可以看到,命令成功执行后会在命令执行的本机启动一个http服务,可以在浏览器上打开本机的7000端口查看详细的分析结果:
页面中显示了所有非平台类信息,点击链接进入,可以查看选中的类的超类,ClassLoader以及该类的实例等信息。此外,在页面的地步,jhat还为开发人员提供了其他查询方式。如图所示:
通过这些链接,开发人员可以查看所有类信息(包含java平台的类),所有根节点,finalizer对象等等信息。最后提供了OQL查询工具,开发人员可以输入OQL语言查询相应的类。关于OQL,笔者就不过多介绍,想了解更多的可以点击这里了解。
jstack命令使用
概述
jstack可用于导出Java运用程序的线程堆栈,其基本使用语法为:
jstack [-l] pid
-l 选项用于打印锁的额外信息。
使用示例
下面这段代码运行之后会出现死锁现象(因为线程1持有lock1,在等待lock2,线程2持有lock2在等待lock1,造成了循环等待,形成死锁):
package com.winwill.deadlock;/*** @author qifuguang* @date 15/6/4 16:45*/public class TestDeadLock {private static final Object lock1 = new Object(); private static final Object lock2 = new Object(); public static void main(String[] args) {Thread t1 = new Thread(new Runnable() { @Overridepublic void run() { synchronized (lock1) { try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();} synchronized (lock2) {System.out.println("线程1执行....");}}}});Thread t2 = new Thread(new Runnable() { @Overridepublic void run() { synchronized (lock2) { try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();} synchronized (lock1) {System.out.println("线程2执行...");}}}});t1.start();t2.start();} }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
我们运行这段代码,然后使用jstack命令导出这个程序的线程堆栈信息:
[qifuguang@Mac~]$ jstack -l 21023 > /tmp/deadlock.txt
打开导出的线程堆栈信息文件,文件末尾如下所示:
如图所示,导出的线程堆栈文件中明确提示发现死锁,并且指明了死锁的原因。
总结
jstack不仅能够导出线程堆栈,还能自动进行死锁检测,输出线程死锁原因。
jcmd命令使用
概述
在JDK 1.7之后,新增了一个命令行工具jcmd。它是一个多功能工具,可以用来导出堆,查看Java进程,导出线程信息,执行GC等。
使用示例
下面这个命令能够列出当前运行的所有虚拟机:
参数-l表示列出所有java虚拟机,针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令,如下图所示,以21024这个进程为例:
查看虚拟机启动时间VM.uptime
打印线程栈信息Thread.print
查看系统中类统计信息GC.class_histogram
执行如下命令:
[qifuguang@Mac~]$ jcmd 21024 GC.class_histogram
得到结果如下:
导出堆信息GC.heap_dump
使用如下命令可以导出当前堆栈信息,这个命令功能和 jmap -dump
功能一样
获取系统Properties内容VM.system_properties
获取启动参数VM.flags
获取所有性能相关数据PerfCounter.print
总结
从以上示例可以看出,jcmd拥有jmap的大部分功能,并且Oracle官方也建议使用jcmd代替jmap。
转载于:https://blog.51cto.com/as007012/1911629
jdk自带常用命令行工具使用相关推荐
- 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...
虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...
- 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:打卡活动第二期来啦,100% 能获得奖品个人原创+1博客:点击前往,查看更多 虚拟机系列文章 深入理解 Java ...
- 面试官:你用过哪些JDK自带的命令行工具
本文基于HotSpot虚拟机,JDK版本1.8.0_171,windows系统 目录 一.jps:虚拟机进程状况工具 二.jstat:虚拟机统计信息监视工具 三.jmap:Java内存映像工具 四.j ...
- PostgreSQL数据库自带的命令行工具--psql
文章目录 PostgreSQL自带的命令行工具--psql 使用psql连接数据库 psql帮助内容 \copyright 发布条款 \h SQL命令的帮助 \? 元命令帮助 psql元命令实际执行S ...
- android系统提供的常用命令行工具
本博客只要没有注明"转",那么均为原创,转贴请注明本博客链接链接 android提供了不少命令行工具,方便我们调试和查看信息.下面是frameworks/base/cmds(and ...
- ROS学习(一)ROS常用命令行工具
目录 一.常用命令 1.rostopic :显示系统中所有与话题相关消息的指令 2.rosservice:显示系统中所有与服务相关消息的指令 3.rosnode:显示系统中所有与节点相关消息的指令 4 ...
- 前端开发常用命令行工具使用技巧
快速删除node_modules目录 cnpm install rimraf -g // 全局安装cd 项目目录 // 进入到项目目录rimraf node_modules // 删除node_mod ...
- ROS系统 常用命令行工具的使用
启动ROS Master roscore 启动小海龟仿真器 rosrun turtlesim turtlesim_node 启动海龟控制节点 rosrun turtlesim turtle_teleo ...
- java性能调试命令_性能测试必备监控技能jvm之jdk命令行工具篇16
3.png 前言 对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈 jps JVM Process Status T ...
最新文章
- 爬虫基础(二)之http协议复习
- Using the New MySQL Query Profiler
- luoguP2479 [SDOI2010]捉迷藏
- 办公技巧:Excel教程36个逆天功能,全面了解一下!
- 【跃迁之路】【522天】程序员高效学习方法论探索系列(实验阶段279-2018.07.12)...
- 存放80000000学生成绩的集合,怎么统计平均分性能高
- 哎呀,搬运blog好累啊,96篇呢QwQ
- mac下将python2.7改为python3
- antd select option 设置字体颜色_匹配颜色是照片合成重要关键点
- 《深入剖析Tomcat》源码
- iis6扩展php_教你IIS6的PHP最佳配置方法
- 杭州电子科技大学第三届网络攻防大赛初赛题目
- WIN2000服务器安全配置(转)
- 用java写新年快乐特效代码_蓝叶分享新年快乐大红灯笼特效代码
- 如何在阿里云中注册域名
- Msc.Marc模拟平板圆孔处应力集中:二维轴对称线弹性分析
- 信息学奥赛一本通(c++):2024:【例4.10】末两位数
- 两个摄像头合成一路_两个摄像头怎样用一个显示屏
- javaSe探赜索隐IO--File
- web导出excel文件的几种方法
热门文章
- 希赛软件设计师视频教程-3.1 进程(第三部分) 标清
- Android开发技巧——ViewPager加View情况封装PagerAdapter的实现类
- 自定义能够for each的类,C#,Java,C++,C++/cli的实现方法
- windows 服务实例
- Weblogic EJB 学习笔记(3)精
- 越来越觉得现在的工作很枯燥
- 影响员工敬业度的三大因素
- 计算机网络第5章(传输层)
- ARM(IMX6U)BSP工程文件管理(分文件编程)
- 不越狱换壁纸_终于来了!iOS 14.3 正式版,可自动定时换壁纸