jps命令
解释:查看Java开启的进程
查看进程:jps -l
Jinfo 命令
解释:查看正在运行的Java应用程序的扩展参数
查看jvm的参数 :Jinfo -flags [进程数]
查看java系统参数:jinfo -sysprops [进程数]
Jstat 命令
解释:jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
注意:使用的jdk版本是jdk8.
类加载统计:jstat -class [进程数]
Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
垃圾回收统计: jstat -gc [进程数]
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
堆内存统计:jstat -gccapacity [进程数]
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
新生代垃圾回收统计:jstat -gcnew [进程数]
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
新生代内存统计:jstat -gcnewcapacity [进程数]
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
老年代垃圾回收统计:jstat -gcold [进程数]
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
老年代内存统计jstat -gcoldcapacity [进程数]
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
元数据空间统计: jstat -gcmetacapacity [进程数]
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
元数据空间统计: jstat -gcutil [进程数]
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
Jmap命令(面试常问)
解释:此命令可以用来查看内存信息。
实例个数以及占用内存大小:jmap -histo [进程数] > [输出文件地址]
打开log.txt,文件内容如下:
num:序号
instances:实例数量
bytes:占用空间大小
class name:类名称
堆信息:jmap -heap [进程数]
解释:打印堆的一个整体概况
堆内存dump:jmap -dump:format=b,file=[输出文件名] [进程数]
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./ (路径)
这两个参数的意思是:如超过设定的内存阈值(内存溢出)会自动导出dump文件(内存很大的时候,可能会导不出来)
在用jvisualvm命令工具导入该dump文件分析(方法:右击文件,装入)
Jstack命令(面试常问)
解释:jstack查找死锁问题
示例:死锁代码
public class DeadLockTest {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
public static void main(String[] args) {
new Thread(() -> {
//线程一
synchronized (lock1) {
try {
System.out.println("thread1 begin");
Thread.sleep(5000);
} catch (InterruptedException e) {
}
synchronized (lock2) {
System.out.println("thread1 end");
}
}
}).start();
new Thread(() -> {
//线程二
synchronized (lock2) {
try {
System.out.println("thread2 begin");
Thread.sleep(5000);
} catch (InterruptedException e) {
}
synchronized (lock1) {
System.out.println("thread2 end");
}
}
}).start();
System.out.println("main thread end");
}
}
代码解释:线程一将lock1锁住,线程二将lock2锁住,导致线程一去拿lock2去锁(线程二拿lock1去锁)的时候造成了死锁。
检查死锁位置命令:jstack [进程数]
或者直接使用jvisualvm
命令,打开可视化界面