如何定位系统问题
- 异常堆栈
- 日志(系统日志,虚拟机日志)
- 线程快照
- 堆转储快照
jps 命令
查看虚拟机进程状况工具,列出正在运行的虚拟机进程
jps [options] [ hostid ]
options : -q,-m,-l,-v
常用命令 jps -l :输出主类的全名。如果进行执行的是JAR包,则输出JAR路径
jstat
统计虚拟机信息监视工具,用于监视虚拟机各种运行状态信息的命令行工具。
jsat [option vmid [interval] [s|ms] [count] ]
option 可选值:-gc
vmid 进程id
interval 查询时间
count 查询次数
例如:jstat -gc 2764 250 20
option 可选
-class // 显示类加载信息
-compiler // 显示编译信息
-gc // 显示GC相关信息
-gccapacity // 显示各区域容量及使用情况
-gccause // 显示垃圾回收信息
-gcmetacapacity // 显示元空间容量信息
-gcnew // 显示新生代信息
-gcnewcapacity // 显示新生代容量信息
-gcold // 显示老年代信息
-gcoldcapacity // 显示老年代容量信息
-gcutil // 显示垃圾收集信息
-printcompilation // 显示JIT编译的方法信息
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jinfo
实时查看和调整虚拟机各项参数
pid 对应jvm的进程id
executable core 产生core dump文件
[server-id@]remote server IP or hostname 远程的ip或者hostname,server-id标记服务的唯一性id
命令:jinfo pid
描述:输出当前 jvm 进程的全部参数和系统属性
命令:jinfo -flag name pid
描述:输出对应名称的参数
jmap
用于生成堆转储快照,还可以查询finalize执行队列,java堆和方法区的详细信息,如空间使用率,当前用的是那种收集器
jmap 命令格式
jmap [ option ] vmid
option 可选的合法值
选项 | 作用 |
---|---|
-dump | 生成Java堆转储快照。格式为 jmap -dump:live,format=b,file=testdump2.txt 97124 或者 jmap -dump:live,format=b,file=testdump2.txt 97124 , 生成的文件可以使用jhat进行分析 jhat testdump.txt |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行的finalize方法的对象。 |
-heap | 显示Java堆详细信息,如使用那种回收器,参数配置,分代状态等 |
-histo | 输出堆空间中对象的统计信息,包括类、实例数量和合计容量 |
-permstat | 以ClassLoader为统计口径输出永久代的内存状态信息 |
-F | 当虚拟机进程对-dump选项没有任何响应时,强制执行生成dump文件 |
可参考:https://blog.youkuaiyun.com/zhangzeyuaaa/article/details/120437040
jhat
虚拟机堆转储快照分析命令与jmap搭配使用,来分析jmap生成的堆转储快照文件(一般不用),正常使用Visual VM 和 Eclipse Memory Analyzer 等工具
jsack
生成虚拟机当前时刻的线程快照,生成的目的通常是定位线程出现长时间停顿的原因,如线程死锁,死循环,请求外部资源导致长时间挂起等。
jstack [option] vmid
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 除堆栈外,显示关于锁的附加信息 |
-m | 如果调用到本地方法,可以显示C/C++的堆栈 |
查看 jstack 99645 | grep -20 “=0x2603”,无线循环
线程死锁堆栈信息