1、環(huán)境
一個(gè)可運(yùn)行的java程序。本例選擇的是xboot (一個(gè)基于springboot 開發(fā)的后臺管理框架)附上地址。jdk版本:1.8
https://github.com/Exrick/xboot
2、命令
2.1 Jinfo
先用jps 命令查看應(yīng)用的進(jìn)程
C:\Users\lujw0>jps
1128 XbootApplication
14924 Jps
通過jps命令可以查出xboot 項(xiàng)目的進(jìn)程id是1128。
- 查看正在運(yùn)行的Java應(yīng)用程序的擴(kuò)展參數(shù)
C:\Users\lujw0>jinfo -flags 1128
Attaching to process ID 1128, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.102-b14
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=3 -XX:InitialHeapSize=134217728 -XX:+ManagementServer -XX:MaxHeapSize=2120220672 -XX:MaxNewSize=706740224 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:4099,suspend=y,server=n -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\lujw0\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8
上邊的這些參數(shù)下面會講,都是對jvm調(diào)優(yōu)配置的一些參數(shù)。
- 查看java 系統(tǒng)參數(shù)
C:\Users\lujw0>jinfo -sysprops 1128
Attaching to process ID 1128, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.102-b14
spring.output.ansi.enabled = always
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.102-b14
sun.boot.library.path = C:\Program Files\Java\jdk1.8.0_102\jre\bin
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = ;
java.rmi.server.randomIDs = true
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level =
sun.java.launcher = SUN_STANDARD
user.script =
user.country = CN
user.dir = F:\bdyhwork\wenda_bms
java.vm.specification.name = Java Virtual Machine Specification
PID = 1128
intellij.debug.agent = true
java.runtime.version = 1.8.0_102-b14
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = C:\Program Files\Java\jdk1.8.0_102\jre\lib\endorsed
line.separator =
java.io.tmpdir = C:\Users\lujw0\AppData\Local\Temp\
java.vm.specification.vendor = Oracle Corporation
user.variant =
os.name = Windows 10
sun.jnu.encoding = GBK
java.library.path = C:\Program Files\Java\jdk1.8.0_102\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\NetSarang\Xshell 6\;C:\Program Files (x86)\NetSarang\Xftp 6\;E:\soft\node\nodeinstall\;C:\windows\system32\;C:\Program Files\TortoiseGit\bin;C:\Program Files\Git\cmd;C:\Users\lujw0\AppData\Local\Android\sdk\platform-tools;C:\Users\lujw0\AppData\Local\Microsoft\WindowsApps;E:\soft\idea 2019\IntelliJ IDEA 2019.1\plugins\maven\lib\maven3\bin;E:\soft\Git\bin;E:\soft\Git\mingw32\libexec\git-core;C:\Users\lujw0\AppData\Roaming\npm;E:\soft\webstom\WebStorm 2019.2.1\bin;C:\Program Files\Java\jdk1.8.0_102\bin;C:\Program Files\Java\jdk1.8.0_102\jre\bin;.
spring.beaninfo.ignore = true
jboss.modules.system.pkgs = com.intellij.rt
java.class.version = 52.0
java.specification.name = Java Platform API Specification
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
spring.liveBeansView.mbeanDomain =
os.version = 10.0
user.home = C:\Users\lujw0
user.timezone = Asia/Shanghai
catalina.useNaming = false
java.awt.printerjob = sun.awt.windows.WPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
catalina.home = C:\Users\lujw0\AppData\Local\Temp\tomcat.5173769956863843077.8888
user.name = bdzh01
java.class.path = C:\Users\lujw0\AppData\Local\Temp\classpath1301191800.jar;C:\Users\lujw0\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar
com.sun.management.jmxremote =
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = cn.exrick.xboot.XbootApplication
java.home = C:\Program Files\Java\jdk1.8.0_102\jre
user.language = zh
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.windows.WToolkit
java.vm.info = mixed mode
java.version = 1.8.0_102
java.ext.dirs = C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path = C:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_102\jre\classes
java.awt.headless = true
java.vendor = Oracle Corporation
catalina.base = C:\Users\lujw0\AppData\Local\Temp\tomcat.5173769956863843077.8888
spring.application.admin.enabled = true
file.separator = \
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
sun.desktop = windows
sun.cpu.isalist = amd64
jinfo -sysprops 這個(gè)命令會更加詳細(xì)會打印出項(xiàng)目運(yùn)行的環(huán)境信息。
2.2 jstat
jstat:該命令可以插件堆內(nèi)存各部分的使用量,以及加載類的數(shù)量。命令格式如下 jstat [-命令選項(xiàng)] [vmid] [間隔時(shí)間/毫秒] [查詢次數(shù)]
- 類加載統(tǒng)計(jì)
C:\Users\lujw0>jstat -class 1128
Loaded Bytes Unloaded Bytes Time
16315 30104.4 0 0.0 37.11
Loaded:加載class的數(shù)量
Bytes:所占用空間大小
Unloaded:未加載數(shù)量
Bytes:未加載占用空間
Time:時(shí)間
-垃圾回收統(tǒng)計(jì)
C:\Users\lujw0>jstat -gc 1128
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
5632.0 28160.0 5328.0 0.0 525824.0 463666.6 138752.0 96939.8 86912.0 82755.8 11648.0 10941.9 28 0.367 3 0.571 0.938
S0C:第一個(gè)幸存區(qū)的大小
S1C:第二個(gè)幸存區(qū)的大小
S0U:第一個(gè)幸存區(qū)的使用大小
S1U:第二個(gè)幸存區(qū)的使用大小
EC:伊甸園區(qū)的大小
EU:伊甸園區(qū)的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區(qū)大小(元空間)
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時(shí)間
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
-堆內(nèi)存統(tǒng)計(jì)
C:\Users\lujw0>jstat -gccapacity 1128
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
43520.0 690176.0 583168.0 25600.0 5632.0 461312.0 87552.0 1380352.0 138752.0 138752.0 0.0 1124352.0 87168.0 0.0 1048576.0 11648.0 31 3
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當(dāng)前新生代容量
S0C:第一個(gè)幸存區(qū)大小
S1C:第二個(gè)幸存區(qū)的大小
EC:伊甸園區(qū)的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:當(dāng)前老年代大小
OC:當(dāng)前老年代大小
MCMN:最小元數(shù)據(jù)容量
MCMX:最大元數(shù)據(jù)容量
MC:當(dāng)前元數(shù)據(jù)空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當(dāng)前壓縮類空間大小
YGC:年輕代gc次數(shù)
FGC:老年代GC次數(shù)
-新生代垃圾回收統(tǒng)計(jì)
C:\Users\lujw0>jstat -gcnew 1128
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
25600.0 5632.0 0.0 5152.0 9 15 25600.0 461312.0 257085.0 31 0.401
S0C:第一個(gè)幸存區(qū)的大小
S1C:第二個(gè)幸存區(qū)的大小
S0U:第一個(gè)幸存區(qū)的使用大小
S1U:第二個(gè)幸存區(qū)的使用大小
TT:對象在新生代存活的次數(shù)
MTT:對象在新生代存活的最大次數(shù)
DSS:期望的幸存區(qū)大小
EC:伊甸園區(qū)的大小
EU:伊甸園區(qū)的使用大小
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時(shí)間
-新生代內(nèi)存統(tǒng)計(jì)
C:\Users\lujw0>jstat -gcnewcapacity 1128
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
43520.0 690176.0 583168.0 229888.0 25600.0 229888.0 5632.0 689152.0 461312.0 31 3
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當(dāng)前新生代容量
S0CMX:最大幸存1區(qū)大小
S0C:當(dāng)前幸存1區(qū)大小
S1CMX:最大幸存2區(qū)大小
S1C:當(dāng)前幸存2區(qū)大小
ECMX:最大伊甸園區(qū)大小
EC:當(dāng)前伊甸園區(qū)大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代回收次數(shù)
-老年代垃圾回收統(tǒng)計(jì)
C:\Users\lujw0>jstat -gcold 1128
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
87168.0 82884.4 11648.0 10941.9 138752.0 96971.8 32 3 0.571 0.983
MC:方法區(qū)大小
MU:方法區(qū)使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
-老年代內(nèi)存統(tǒng)計(jì)
C:\Users\lujw0>jstat -gcoldcapacity 1128
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
87552.0 1380352.0 138752.0 138752.0 32 3 0.571 0.983
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:當(dāng)前老年代大小
OC:老年代大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
-元數(shù)據(jù)空間統(tǒng)計(jì)
C:\Users\lujw0>jstat -gcmetacapacity 1128
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1124352.0 87168.0 0.0 1048576.0 11648.0 32 3 0.571 0.983
MCMN:最小元數(shù)據(jù)容量
MCMX:最大元數(shù)據(jù)容量
MC:當(dāng)前元數(shù)據(jù)空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當(dāng)前壓縮類空間大小
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
-總結(jié)垃圾回收統(tǒng)計(jì)
C:\Users\lujw0>jstat -gcutil 1128
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
91.76 0.00 95.12 69.89 95.09 93.94 32 0.412 3 0.571 0.983
S0:幸存1區(qū)當(dāng)前使用比例
S1:幸存2區(qū)當(dāng)前使用比例
E:伊甸園區(qū)使用比例
O:老年代使用比例
M:元數(shù)據(jù)區(qū)使用比例
CCS:壓縮使用比例
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
2.3、Jmap(常用)
此命令可以產(chǎn)看內(nèi)存信息
-實(shí)例個(gè)數(shù)以及占有內(nèi)存大小
C:\Users\lujw0>jmap -histo 1128 >./hmaplog.txt
num #instances #bytes class name
----------------------------------------------
1: 1246051 216721832 [C
2: 800697 19216728 java.lang.String
3: 19592 12175032 [B
4: 183451 7338040 java.util.LinkedHashMap$Entry
5: 78428 6901664 java.lang.reflect.Method
6: 13787 5713720 [I
7: 201053 4825272 java.util.LinkedList$Node
8: 190438 4570512 com.intellij.rt.debugger.agent.CaptureStorage$HardKey
9: 105248 4209920 org.springframework.boot.devtools.filewatch.FileSnapshot
10: 129555 4145760 java.io.File
11: 36369 4074608 [Ljava.util.HashMap$Node;
12: 80872 3844216 [Ljava.lang.String;
13: 119361 3819552 java.util.concurrent.ConcurrentHashMap$Node
14: 107645 3444640 java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
15: 53509 2703504 [Ljava.lang.Object;
16: 80417 2573344 java.util.HashMap$Node
17: 35803 2004968 java.util.LinkedHashMap
18: 17368 1933400 java.lang.Class
19: 51969 1663008 java.lang.ref.WeakReference
20: 1122 1466832 [Ljava.util.concurrent.ConcurrentHashMap$Node;
21: 52470 1259280 java.util.ArrayList
22: 57148 1256584 [Ljava.lang.Class;
23: 15724 1132128 java.lang.reflect.Field
num:序號
instances:實(shí)例數(shù)量
bytes:占用空間大小
class name:類名稱
-堆信息
C:\Users\lujw0>jmap -heap 1128
Attaching to process ID 1128, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.102-b14
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2120220672 (2022.0MB)
NewSize = 44564480 (42.5MB)
MaxNewSize = 706740224 (674.0MB)
OldSize = 89653248 (85.5MB)
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 = 415760384 (396.5MB)
used = 364749400 (347.85213470458984MB)
free = 51010984 (48.647865295410156MB)
87.73067710077927% used
From Space:
capacity = 5242880 (5.0MB)
used = 5046320 (4.8125457763671875MB)
free = 196560 (0.1874542236328125MB)
96.25091552734375% used
To Space:
capacity = 23068672 (22.0MB)
used = 0 (0.0MB)
free = 23068672 (22.0MB)
0.0% used
PS Old Generation
capacity = 142082048 (135.5MB)
used = 99299144 (94.69904327392578MB)
free = 42782904 (40.80095672607422MB)
69.88859282208544% used
42219 interned Strings occupying 4803176 bytes.
-堆內(nèi)存的dump 文件
C:\Users\lujw0>jmap -dump:format=b,file=xbootdump.hprof 1128
Dumping heap to C:\Users\lujw0\xbootdump.hprof ...
Heap dump file created
也可以設(shè)置內(nèi)存溢出自動導(dǎo)出dump文件(內(nèi)存很大的時(shí)候,可能會導(dǎo)不出來)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./ (路徑)
可以用jvisualvm命令工具導(dǎo)入該dump文件分析
C:\Users\lujw0>jvisualvm
輸入上述命令之后就會打開jdk 自帶的內(nèi)存分析工具jvisualvm


2.4、Jstack
jstack用于打印出給定的java進(jìn)程ID或core file或遠(yuǎn)程調(diào)試服務(wù)的Java堆棧信息,如果是在64位機(jī)器上,需要指定選項(xiàng)"-J-d64",
Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid
如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題。另外,jstack工具還可以附屬到正在運(yùn)行的java程序中,看到當(dāng)時(shí)運(yùn)行的java程序的java stack和native stack的信息, 如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的。
C:\Users\lujw0>jstack 1128
2020-02-22 12:16:36
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.102-b14 mixed mode):
"RMI TCP Connection(6)-192.168.5.83" #203 daemon prio=5 os_prio=0 tid=0x00000000211cc000 nid=0x38d0 runnable [0x000000002b66d000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
- locked <0x00000000ee61a020> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:550)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/1653161508.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
"JMX server connection timeout 202" #202 daemon prio=5 os_prio=0 tid=0x00000000211c4800 nid=0x3a30 in Object.wait() [0x000000002b36f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168)
- locked <0x00000000ee610a10> (a [I)
at java.lang.Thread.run(Thread.java:745)
用jstack查找死鎖,見如下示例,也可以用jvisualvm查看死鎖
新寫一個(gè)java 死鎖的程序
public class DeadLockTest {
public static Object lock1 = new Object();
public static Object lock2 = new Object();
public static void main(String[] args) {
new Thread(() -> {
synchronized (lock1) {
try {
System.out.println("thread1 開始執(zhí)行");
Thread.sleep(500);
} catch (Exception e) {
}
synchronized (lock2) {
System.out.println("thread1 執(zhí)行結(jié)束");
}
}
}).start();
new Thread(() -> {
synchronized (lock2) {
try {
System.out.println("thread2 開始執(zhí)行");
Thread.sleep(500);
} catch (Exception e) {
}
synchronized (lock1) {
System.out.println("thread2 執(zhí)行結(jié)束");
}
}
}).start();
}
}
通過jstack +進(jìn)程id 也可以查看
Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x00000000181305a8 (object 0x00000000d6157ef0, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x000000001812dc68 (object 0x00000000d6157f00, a java.lang.Object),
which is held by "Thread-1"
Java stack information for the threads listed above:
===================================================
"Thread-1":
at com.spring.study.user.test.DeadLockTest.lambda$main$1(DeadLockTest.java:33)
- waiting to lock <0x00000000d6157ef0> (a java.lang.Object)
- locked <0x00000000d6157f00> (a java.lang.Object)
at com.spring.study.user.test.DeadLockTest$$Lambda$2/1792845110.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
"Thread-0":
at com.spring.study.user.test.DeadLockTest.lambda$main$0(DeadLockTest.java:21)
- waiting to lock <0x00000000d6157f00> (a java.lang.Object)
- locked <0x00000000d6157ef0> (a java.lang.Object)
at com.spring.study.user.test.DeadLockTest$$Lambda$1/716143810.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Found 1 deadlock.
通過jvisualvm 查看死鎖

遠(yuǎn)程連接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遠(yuǎn)程連接服務(wù)需要在遠(yuǎn)程服務(wù)器上配置host(連接ip 主機(jī)名),并且要關(guān)閉防火墻

jstack找出占用cpu最高的堆棧信息
1,使用命令top -p <pid> ,顯示你的java進(jìn)程的內(nèi)存情況,pid是你的java進(jìn)程號,比如4977
2,按H,獲取每個(gè)線程的內(nèi)存情況
3,找到內(nèi)存和cpu占用最高的線程tid,比如4977
4,轉(zhuǎn)為十六進(jìn)制得到 0x1371 ,此為線程id的十六進(jìn)制表示
5,執(zhí)行 jstack 4977|grep -A 10 1371,得到線程堆棧信息中1371這個(gè)線程所在行的后面10行
6,查看對應(yīng)的堆棧信息找出可能存在問題的代碼