定位 java虚拟机内存问题 个人总结

时间:2022-06-15 15:17:26
一。在linux服务器上  
     top     :找到cup或者内存占用过高的那个进程pid
 
二。top    -Hp  【进程pid】
     可以继续跟踪该进程中的所有线程信息,找到cup或者内存过高的那个线程,将该线程id转化为16进制,以便在后面的线程堆栈信息中用该关键字查看
 
三。jstack 【进程pid】> jstack_you_file.txt    
     然后 less “线程id” jstack_you_file.txt 便可查看是什么线程,在执行什么任务
 
 
 
 
 
 
 
JDK之jstat的用法
 
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用
 
语法结构:
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
 参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid    — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count   — 打印次数,如果缺省则打印无数次
 
S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
实例使用1:
[root@localhost bin]# jstat -gcutil 25444
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 
 11.63   0.00   56.46  66.92  98.49 162    0.248    6      0.331    0.579
 
 
 
 
 
 
 
 
 
jmap(Memory Map)和jhat(Java Heap Analysis Tool)
 
     jmap -histo [:live] pid  查看堆内存中的对象数目,大小统计直方图,带上live参数则只统计存活对象
 
    jmap -dump:format=b,file=dumpYouOwnFileName.txt pid     将内存快照dump到本地文件,使用jhat来进行内存对象分析