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