问题
- linux查看进程的线程信息
- ps -T -p $pid
- top -H -p $pid
- VIRT:申请内存
- RES:常驻内存(含进程共享;不包含swap out)
- SHR:共享内存
- 实际占用物理内存:RES-SHR
- htop - F2 - 设置 - 显示选项 - 树状视图+显示自定义线程名
常用工具
JDK自带
- 所有工具都在JDK/bin下,jvisualvm和jconsole为GUI,其他为命令行
- jstack
jstack -l $pid > jstack.log
- jvisualvm
- 可监控、性能评估、故障诊断主机上所有java进程的cpu,内存,线程使用情况,类似于JProfiler,严重推荐
- jconsole
- java开发,以图表化形式显示cpu,内存,线程数据,并可远程连接监视远程JVM
- jinfo
jinfo -opt $pid
jinfo -flag MaxPermSize $pid # 查看MaxPermSize大小
- jps
- 类似unix的ps,显示本地java进程,含pid
- jmap
- 打印java进程(pid)内所有对象情况
- dump:堆转储快照
- heap:堆详细信息
- histo:堆中对象统计信息
jmap -dump:format=b,file=dump.bin $pid # 生成的bin文件可用MAT进行分析
# 似乎已经改成jhsdb jmap --heap --pid $pid
jmap -heap $pid # 显示各分区使用量
jmap -histo $pid # 显示所有对象的数量统计
[root@localhost logs]# jhsdb jmap --heap --pid 8863
Attaching to process ID 8863, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 9.0.4+11
using thread-local object allocation.
Garbage-First (G1) GC with 2 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 482344960 (460.0MB)
NewSize = 1363144 (1.2999954223632812MB)
MaxNewSize = 289406976 (276.0MB)
OldSize = 5452592 (5.1999969482421875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 1048576 (1.0MB)
Heap Usage:
G1 Heap:
regions = 460
capacity = 482344960 (460.0MB)
used = 1048576 (1.0MB)
free = 481296384 (459.0MB)
0.21739130434782608% used
G1 Young Generation:
Eden Space:
regions = 1
capacity = 8388608 (8.0MB)
used = 1048576 (1.0MB)
free = 7340032 (7.0MB)
12.5% used
Survivor Space:
regions = 0
capacity = 0 (0.0MB)
used = 0 (0.0MB)
free = 0 (0.0MB)
0.0% used
G1 Old Generation:
regions = 0
capacity = 23068672 (22.0MB)
used = 0 (0.0MB)
free = 23068672 (22.0MB)
0.0% used
3366 interned Strings occupying 234592 bytes.
- jstat
- JVM内存工具,用来监视堆和非堆大小,使用量,以及加载类信息
jstat -class $pid # 加载类数量,及所占空间
jstat -compiler $pid # JVM实时编译信息
jstat -util $pid # gc信息统计
jstat -gc $pid # gc信息,最后五项分别是young gc次数,young gc时间,full gc次数,full gc时间,gc总时间
# JVM中young,old,perm三代对象使用和占用大小
# PGCMN表示perm最小使用量,PGCMX表示perm最大使用量,PGC是当前新生成对象的perm占用量,PC是当前perm占用量;其他以此类推
jstat -gccapacity $pid
jstat -gcnew $pid # new对象信息
jstat -gcnewcapacity $pid # new对象信息及占用量
jstat -gcold $pid # old对象信息
jstat -gcoldcapacity $pid # old对象信息及占用量
jstat -gcpermcapacity $pid # perm对象信息及占用量
jstat -printcompilation $pid # 当前JVM解释执行信息
jstat -printcompilation $pid 250 6 -h3 # 每250毫秒打印,打印6次,每三行显示一下标题
网友评论