jps查询出所有的java运行程序
C:\Users>jps
14624 Jps
17600 GgUserApplication
20752 RemoteMavenServer
10616
8652 Launcher
查询java运行的初始值:jinfo -flags 17600
java系统参数:jinfo -sysprops 17600
jstat
类加载统计:
jstat -class 17600
C:\Users>jstat -class 17600
Loaded Bytes Unloaded Bytes Time
11313 20765.3 6 9.4 12.17
Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
统计垃圾回收
jstat -gc 17600
C:\Users>jstat -gc 17600
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
22528.0 23040.0 0.0 0.0 492544.0 52825.3 215552.0 49778.0 59096.0 56602.6 7936.0 7511.8 11 0.150 3 0.366 0.516
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
堆内存统计
jstat -gccapacity 17600
C:\Users>jstat -gccapacity 17600
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
87040.0 1394688.0 692736.0 22528.0 23040.0 492544.0 175104.0 2789376.0 215552.0 215552.0 0.0 1099776.0 59096.0 0.0 1048576.0 7936.0 11 3
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
新生代垃圾回收统计
jstat -gcnew 17600
C:\Users>jstat -gcnew 17600
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
22528.0 23040.0 0.0 0.0 1 15 22528.0 492544.0 52825.3 11 0.150
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
新生代内存统计
jstat -gcnewcapacity 17600
C:\Users>jstat -gcnewcapacity 17600
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
87040.0 1394688.0 692736.0 464896.0 22528.0 464896.0 23040.0 1393664.0 492544.0 11 3
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
老年代垃圾回收统计
jstat -gcold 17600
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
59096.0 56602.6 7936.0 7511.8 215552.0 49778.0 11 3 0.366 0.516
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
老年代内存统计
jstat -gcoldcapacity 17600
C:\Users>jstat -gcoldcapacity 17600
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
175104.0 2789376.0 215552.0 215552.0 11 3 0.366 0.516
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
元数据空间统计
jstat -gcmetacapacity 17600
C:\Users>jstat -gcmetacapacity 17600
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1099776.0 59096.0 0.0 1048576.0 7936.0 11 3 0.366 0.516
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcutil 17600
C:\Users\yangxinlei>jstat -gcutil 17600
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 10.81 23.09 95.78 94.65 11 0.150 3 0.366 0.516
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jmap查看内容信息
查看某个进程的内存占用大小
jmap -histo 17600 > ./log.txt
文件内容
num #instances #bytes class name
----------------------------------------------
1: 5623 47525656 [I
2: 126740 19063304 [C
3: 25990 7878072 [B
4: 40695 3581160 java.lang.reflect.Method
5: 110797 2659128 java.lang.String
6: 51806 1657792 java.util.concurrent.ConcurrentHashMap$Node
7: 12129 1349520 java.lang.Class
8: 22399 1125168 [Ljava.lang.Object;
9: 15912 1096160 [Ljava.util.HashMap$Node;
10: 33217 1062944 java.util.HashMap$Node
11: 31694 1014208 java.lang.ref.WeakReference
12: 24426 977040 java.util.LinkedHashMap$Entry
13: 15264 732672 org.aspectj.weaver.reflect.ShadowMatchImpl
14: 12794 716464 java.util.LinkedHashMap
15: 31910 711512 [Ljava.lang.Class;
16: 7152 514944 java.lang.reflect.Field
17: 19271 492992 [Ljava.lang.String;
18: 12247 489880 java.lang.ref.SoftReference
19: 15264 488448 org.aspectj.weaver.patterns.ExposedState
20: 462 466384 [Ljava.util.concurrent.ConcurrentHashMap$Node;
21: 17546 421104 java.util.ArrayList
22: 8773 421104 java.util.HashMap
23: 6960 389760 java.beans.MethodDescriptor
24: 13900 333600 java.beans.MethodRef
25: 20000 320000 java.lang.Object
26: 5424 260352 org.springframework.core.ResolvableType
27: 6464 258560 org.springframework.util.ConcurrentReferenceHashMap$Segment
28: 7534 241088 java.util.concurrent.locks.ReentrantLock$NonfairSync
29: 3004 240320 java.lang.reflect.Constructor
30: 5922 236880 java.util.WeakHashMap$Entry
31: 7240 231680 java.lang.ref.ReferenceQueue
32: 3384 221488 [Ljava.lang.reflect.Method;
33: 6185 197920 java.util.Hashtable$Entry
34: 6608 187456 [Lorg.springframework.util.ConcurrentReferenceHashMap$Reference;
35: 1694 162624 org.springframework.beans.GenericTypeAwarePropertyDescriptor
36: 6464 155136 org.springframework.util.ConcurrentReferenceHashMap$ReferenceManager
37: 4576 146432 java.util.ArrayList$Itr
38: 2604 145824 java.lang.Class$ReflectionData
39: 1894 136368 org.springframework.core.annotation.AnnotationAttributes
40: 5466 131184 org.springframework.core.MethodClassKey
41: 5446 130704 java.util.jar.Attributes$Name
42: 5362 121544 [Ljava.lang.reflect.Type;
43: 2941 117640 java.lang.ref.Finalizer
44: 1613 116136 java.beans.PropertyDescriptor
45: 7243 115888 java.lang.ref.ReferenceQueue$Lock
46: 1788 114432 org.springframework.core.MethodParameter
47: 2741 109640 java.util.TreeMap$Entry
48: 2200 105600 org.springframework.util.ConcurrentReferenceHashMap$SoftEntryReference
49: 2554 102160 java.util.HashMap$KeyIterator
50: 4172 100128 sun.reflect.generics.tree.SimpleClassTypeSignature
51: 4156 99744 java.util.LinkedList$Node
52: 1493 95552 java.net.URL
53: 2836 90752 java.util.LinkedList
54: 1253 85384 [S
55: 1260 80640 com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty
56: 570 79680 [Ljava.util.WeakHashMap$Entry;
57: 4172 78456 [Lsun.reflect.generics.tree.TypeArgument;
58: 401 77296 [Ljava.util.Hashtable$Entry;
59: 1265 70840 java.util.concurrent.ConcurrentHashMap$KeyIterator
60: 4343 69488 java.util.LinkedHashSet
61: 2854 68496 sun.reflect.annotation.AnnotationInvocationHandler
62: 1159 64904 java.lang.invoke.MemberName
63: 3911 62576 sun.reflect.generics.tree.ClassTypeSignature
64: 3797 60752 java.util.jar.Attributes
65: 2518 60432 java.util.Collections$UnmodifiableCollection$1
66: 3738 59808 java.util.HashMap$EntrySet
67: 982 54992 java.util.zip.ZipFile$ZipFileInputStream
68: 977 54712 java.util.zip.ZipFile$ZipFileInflaterInputStream
69: 946 52976 java.lang.Package
70: 314 52752 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition
71: 2156 51744 org.springframework.util.ConcurrentReferenceHashMap$Entry
72: 3078 49248 java.util.LinkedHashMap$LinkedKeySet
73: 767 49088 java.util.concurrent.ConcurrentHashMap
74: 2974 47584 org.springframework.core.annotation.AnnotationUtils$DefaultValueHolder
75: 1188 46264 [Z
76: 2875 46000 org.springframework.core.ResolvableType$DefaultVariableResolver
77: 1606 44192 [Ljava.lang.CharSequence;
78: 1092 43680 java.lang.invoke.MethodType
79: 273 43680 org.springframework.beans.factory.support.RootBeanDefinition
80: 907 43536 org.apache.tomcat.util.modeler.AttributeInfo
num:序号
instances:实例数量
bytes:占用空间大小
class name:类名称
堆信息
jmap -heap 17600
Attaching to process ID 17600, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 4284481536 (4086.0MB)
NewSize = 89128960 (85.0MB)
MaxNewSize = 1428160512 (1362.0MB)
OldSize = 179306496 (171.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 504365056 (481.0MB)
used = 54519344 (51.99369812011719MB)
free = 449845712 (429.0063018798828MB)
10.809500648673012% used
From Space:
capacity = 23592960 (22.5MB)
used = 0 (0.0MB)
free = 23592960 (22.5MB)
0.0% used
To Space:
capacity = 23068672 (22.0MB)
used = 0 (0.0MB)
free = 23068672 (22.0MB)
0.0% used
PS Old Generation
capacity = 220725248 (210.5MB)
used = 50972656 (48.61131286621094MB)
free = 169752592 (161.88868713378906MB)
23.09326026898382% used
28892 interned Strings occupying 3416424 bytes.
堆内存dump
jmap -dump:format=b,file=eureka.hprof 17600
也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
1. -XX:+HeapDumpOnOutOfMemoryError
2. -XX:HeapDumpPath=./ (路径)
可以用jvisualvm 命令工具导入该dump文件分析
jstack
jstack是用来查看线程死锁的,但是也是可以jvisualvm查看锁死
package demo05;
public class DeadLockTest {
private static Object locak1 = new Object();
private static Object locak2 = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized(locak1){
try {
System.out.println("thread1 begin");
Thread.sleep(5000);
}catch (Exception e){
}
synchronized ((locak2)){
System.out.println("thread1 end");
}
}
}).start();
new Thread(()->{
synchronized(locak2){
try {
System.out.println("thread2 begin");
Thread.sleep(5000);
}catch (Exception e){
}
synchronized ((locak1)){
System.out.println("thread2 end");
}
}
}).start();
System.out.println("mian thread end");
}
}
远程连接jvisualvm
启动普通的jar程序JMX端口配置:
java -Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -jar foo.jar
tomcat的JMX配置
JAVA_OPTS=-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
jvisualvm远程连接服务需要在远程服务器上配置host(连接ip 主机名),并且要关闭防火墙
jstack找出占用cpu最高的堆栈信息
1、使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如4977
2、按H,获取每个线程的内存情况
3、找到内存和cpu占用最高的线程tid,比如4977
4、转为十六进制得到 0x1371 ,此为线程id的十六进制表示
5、执行 jstack 4977|grep -A 10 1371,得到线程堆栈信息中1371这个线程所在行的后面10行
6、查看对应的堆栈信息找出可能存在问题的代码
自己总结完整java知识地址访问:https://www.yuque.com/yangxinlei/lodfss