1、jps命令
jps:虚拟机进程状态工具,该命令在Java环境部署和服务启动查看时经常用到,首先在本地启动一个facade门面微服务,然后在命令行中执行查询;
-
jps
:命令默认输出的是进程ID和应用主类的名称; -
-l
:输出进程ID和应用主类的完整路径; -
-v
:输出向jvm传递的参数,此处展示为idea中显式配置的VM-options参数,其他内容自行查看即可; -
-m
:输出向main方法传递的参数,服务启动前可以在idea的Program-arguments配置;
$ jps
1281 FacadeApp
$ jps -l
1281 com.explore.facade.FacadeApp
$ jps -v
1281 FacadeApp -Xms128m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
$ jps -m
1281 FacadeApp hello,main-meth
查看pid命令
jps -q
查看堆的使用情况
一. jmap -heap pid
8477b74-dmn5k/logs]# jmap -heap 9
Attaching to process ID 9, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
using thread-local object allocation.
Garbage-First (G1) GC with 1 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 1363144 (1.2999954223632812MB)
MaxNewSize = 643825664 (614.0MB)
OldSize = 5452592 (5.1999969482421875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 1048576 (1.0MB)
Heap Usage:
G1 Heap:
regions = 1024
capacity = 1073741824 (1024.0MB)
used = 654233080 (623.9252853393555MB)
free = 419508744 (400.07471466064453MB)
60.93020364642143% used
G1 Young Generation:
Eden Space:
regions = 557
capacity = 673185792 (642.0MB)
used = 584056832 (557.0MB)
free = 89128960 (85.0MB)
86.7601246105919% used
Survivor Space:
regions = 3
capacity = 3145728 (3.0MB)
used = 3145728 (3.0MB)
free = 0 (0.0MB)
100.0% used
G1 Old Generation:
regions = 65
capacity = 397410304 (379.0MB)
used = 67030520 (63.92528533935547MB)
free = 330379784 (315.07471466064453MB)
16.866829904843133% used
也可以将也可以将堆内存信息导出到文件中
jmap ‐dump:format=b,file=eureka.hprof 进程id
jmap -dump:format=b,file=D:\data\heapdump.hprof 9704
报错:
jmap 存取堆信息到指定路径
jmap -histo 进程Id > ./log.txt
如:jmap -histo 10880 > D:\data\ps.txt
输出内容如:
num #instances #bytes class name
----------------------------------------------
1: 403251 53605360 [C
2: 222799 51401520 [B
3: 35266 23580072 [I
4: 176461 4235064 java.lang.String
5: 66401 4040168 [Ljava.lang.Object;
6: 191950 3765632 [Ljava.lang.Class;
7: 41315 3635720 java.lang.reflect.Method
8: 28438 2282552 [Ljava.util.HashMap$Node;
9: 66033 2113056 java.util.HashMap$Node
10: 23733 1895888 [S
.......
.......
4218: 1 16 sun.util.locale.provider.SPILocaleProviderAdapter
4219: 1 16 sun.util.locale.provider.TimeZoneNameUtility$TimeZoneNameGetter
4220: 1 16 sun.util.resources.LocaleData
4221: 1 16 sun.util.resources.LocaleData$LocaleDataResourceBundleControl
Total 2251225 183870720
二. jdk自带jvm检查工具
jvisualvm
Visual GC 插件使用如下
Visual GC 插件使用 - 简书 (jianshu.com)https://www.jianshu.com/p/9e4ccd705709
修改visula gc插件的jdk安装位置,否则会报找不到jdk
visualvm_jdkhome="C:\developTool\JDK\jdk8\jdk1.8.0_65\jdk1.8.0_65"
三. jhat命令
分析dump文件,我们可以用jdk里面提供的jhat工具,执行
jhat xxx.dump
jhat加载解析xxx.dump文件,并开启一个简易的web服务,默认端口为7000,可以通过浏览器查看内存中的一些统计信息,会出现无法找到main函数等
四. jinfo -flag name PID 查看某个java进程的name属性的值
jinfo -flag MaxHeapSize PID
jinfo -flag UseG1GC PID
五. jstat查看垃圾回收:
jstat -class PID 1000 10 查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次
查看垃圾收集信息
linux如何查看垃圾回收GC的情况,包括fullGC次数和耗时
解决方法:
jstat -gc PID 毫秒数 刷新次数
例如:
假如我的tomcat启动后的PID是12880,5秒刷新一次,只刷新20次
jstat -gc 12880 5000 20
补充:
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 — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
查看线程堆栈信息
jstack PID