一、基础命令行工具
1.jps:虚拟机进程状况工具
可以列出本机正在运行的虚拟机进程,并显示主类
1.1.选项:
选项 | 作用 |
---|---|
-q | 省略主类,只显示id |
-l | 显示主类全名,或jar包路径 |
-m | 显示传递给主类main方法的参数 |
-v | 输出jvm启动时所有参数 |
2.jstat:虚拟机统计信息监控
用于监视虚拟机运行状态的命令行工具,可以显示本地或远程进程的类加载、内存、垃圾收集,即时编译等运行时数据;
使用jstat工具在纯文本状态下监视虚拟机状态的变化, 在用户体验上也许不如JMC、 VisualVM等可视化的监视工具直接以图表展现那样直观, 但在实际生产环境中不一定可以使用图形界面, 直接在控制台中使用jstat命令依然是一种常用的监控方式
2.1.命令行格式:
jstat [ option vmid [interval[s|ms] [count]] ]
参数interval和count代表查询间隔和次数, 如果省略这2个参数, 说明只查询一次
选项option代表用户希望查询的虚拟机信息, 主要分为三类: 类加载、 垃圾收集、 运行期编译状况。
2.2.选项
选项 | 作用 |
---|---|
-class | 监视类加载、卸载数量,及类加载所耗时间 |
-gc | 监视java堆,含Eden区,2个survivor区,老年代、永久代容量,已用空间,gc时间 |
-gccapacity | 与-gc相同,主要输出java堆各区使用到的最大最小空间 |
-gcutil | 与-gc相同,主要输出已用空间在总空间的占比 |
-gccause | 与-gcutil相同,但会输出上次gc的原因 |
-gcnew | 监视新生代垃圾收集状况 |
-gcnewcapacity | 与-gcnew相同,主要关注使用的最大最小空间 |
-gcold | 监视老年代垃圾收集状况 |
-gcoldcapacity | 与-gcold相同,主要关注使用的最大最小空间 |
-gcpermcapacity | 监视永久代使用最大最小空间 |
-compiler | 输出即时编译器编译的方法和耗时 |
-printcompilation | 输出已被编译过的方法 |
3.jinfo:java配置信息
使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表, 但如果想知道未被显式指定的参数的系统默认值, 就只能使用jinfo的-flag选项进行查询了
4.jmap:java内存映像工具
jmap用于生产堆转储快照
4.1.选项
选项 | 作用 |
---|---|
-dump | 生产java堆内存转储快照 |
-finalizerinfo | 显示等待finalizer线程执行finalize的对象,只在Linux有用 |
-heap | 显示java堆详细信息,只在Linux有用 |
-histo | 显示堆对象统计信息,包括类、实例、合计容量 |
-permstat | 显示永久代内存数量,只在Linux有用 |
-F | 强制生成dump快照 |
4.2.案例
jmap -dump:format=b,file=eclipse.bin 3500
5.jstack:java堆栈跟踪工具
用于生成虚拟机当前时刻的线程快照。 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合, 生成线程快照的目的通常是定位线程出现长时间停顿的原因, 如线程间死锁、 死循环、 请求外部资源导致的长时间挂 起等, 都是导致线程长时间停顿的常见原因。 线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情, 或者等待着什么资源。
5.1.选项
选项 | 作用 |
---|---|
-F | 强制输出线程堆栈 |
-l | 除堆栈外,显示关于锁的附加信息 |
-m | 如果调用本地方法,可以显示c/c++堆栈 |