1、jstack

jstack主要用来查看某个Java进程内的线程堆栈信息

1.1 打印线程信息(排查CPU使用率高)

https://www.cnblogs.com/hopeway-shaon/p/17676986.html

1.2 获取进行运行的情况

jstack -l PID

“prio=5”表示线程的优先级。
“os_prio=0”表示操作系统级别的优先级。
“tid=0x000000001b27b000”表示线程id。
“nid=0x1d68”表示操作系统映射的线程id。  16进制
“waiting for monitor entry”表示线程正在获取锁。
“0x000000001bbcf000”表示线程栈的起始地址。

1.3 排查死锁问题

https://zhuanlan.zhihu.com/p/475571849
通过jstack pid 可以输出以下日志

2、jmap

jmap用来查看堆内存使用状况,一般结合jhat使用。

2.1 jmap -heap pid查看进程堆内存使用情况

包括使用的GC算法、堆配置参数和各代中堆内存使用情况。如下图:

参数分析:
Heap Configuration:
   MinHeapFreeRatio         = 0    //JVM最小空闲比率 可由-XX:MinHeapFreeRatio=<n>参数设置, jvm heap 在使用率小于 n 时 ,heap 进行收缩
   MaxHeapFreeRatio         = 100  //JVM最大空闲比率 可由-XX:MaxHeapFreeRatio=<n>参数设置, jvm heap 在使用率大于 n 时 ,heap 进行扩张 
   MaxHeapSize              = 2095054848 (1998.0MB) //JVM堆的最大大小 可由-XX:MaxHeapSize=<n>参数设置
   NewSize                  = 44040192 (42.0MB) //JVM新生代的默认大小 可由-XX:NewSize=<n>参数设置
   MaxNewSize               = 698351616 (666.0MB) //JVM新生代的最大大小 可由-XX:MaxNewSize=<n>参数设置
   OldSize                  = 88080384 (84.0MB) //JVM老生代的默认大小 可由-XX:OldSize=<n>参数设置 
   NewRatio                 = 2 //新生代:老生代(的大小)=1:2 可由-XX:NewRatio=<n>参数指定New Generation与Old Generation heap size的比例。
   SurvivorRatio            = 8 //survivor:eden = 1:8,即survivor space是新生代大小的1/(8+2)[因为有两个survivor区域] 可由-XX:SurvivorRatio=<n>参数设置
   MetaspaceSize            = 21807104 (20.796875MB) //元空间的默认大小,超过此值就会触发Full GC 可由-XX:MetaspaceSize=<n>参数设置
   CompressedClassSpaceSize = 1073741824 (1024.0MB) //类指针压缩空间的默认大小 可由-XX:CompressedClassSpaceSize=<n>参数设置
   MaxMetaspaceSize         = 17592186044415 MB //元空间的最大大小 可由-XX:MaxMetaspaceSize=<n>参数设置
   G1HeapRegionSize         = 0 (0.0MB) //使用G1垃圾收集器的时候,堆被分割的大小 可由-XX:G1HeapRegionSize=<n>参数设置

Heap Usage:
PS Young Generation //新生代区域分配情况
Eden Space: //Eden区域分配情况
   capacity = 89653248 (85.5MB)
   used     = 8946488 (8.532035827636719MB)
   free     = 80706760 (76.96796417236328MB)
   9.978989272089729% used
From Space: //其中一个Survivor区域分配情况
   capacity = 42467328 (40.5MB)
   used     = 15497496 (14.779563903808594MB)
   free     = 26969832 (25.720436096191406MB)
   36.49275037977431% used
To Space:  //另一个Survivor区域分配情况
   capacity = 42991616 (41.0MB)
   used     = 0 (0.0MB)
   free     = 42991616 (41.0MB)
   0.0% used
PS Old Generation //老生代区域分配情况
   capacity = 154664960 (147.5MB)
   used     = 98556712 (93.99100494384766MB)
   free     = 56108248 (53.508995056152344MB)
   63.722715216167906% used

2.2 dump出堆信息

jmap -dump:live,format=b,file=./dump/dumpName.hprof 18376
可以使用MAT等软件进行分析
内存分析工具 MAT 的使用
https://blog.csdn.net/aaa2832/article/details/19419679
https://www.jianshu.com/p/c6e2abb9f657
https://www.javatang.com/archives/2017/11/08/11582145.html
https://www.javatang.com/archives/2017/10/25/36441958.html

3、jstat

JVM 统计监测工具,查看各个区域内存和 GC 的情况

堆内存以及GC使用明细 2000毫秒执行一次 共计5次
jstat -gc pid 2000 5

堆内存使用百分比
jstat -gcutil pid

S0 : survivor0区的总容量
S1 : survivor1区的总容量
E 代表 Eden 区使用率;
O(Old)代表老年代使用率 ;
P(Permanent)代表永久代使用率;
CCS 压缩使用比例
M 元空间(MetaspaceSize)已使用的占当前容量百分比
YGC(Young GC)代表Minor GC 次数;
YGCT代表Minor GC耗时;
FGC(Full GC)代表Full GC次数;
FGCT(Full GC)代表Full GC耗时;
GCT代表Minor & Full GC共计耗时。

4、

5、lscpu

https://blog.csdn.net/guihunkun/article/details/120179625
CPU(s): 96 #逻辑cpu个数 96 = 4122
On-line CPU(s) list: 0-95
Thread(s) per core: 2 #每个核心线程数
Core(s) per socket: 12 #每个物理CPU的核数
Socket(s): 4 #物理CPU个数