jvm 内存分析

jsp 获取pid


jstat -gccause pid 1 每格1毫秒输出结果
jstat -gccause pid 2000 每格2秒输出结果
不断的在屏幕打印出结果
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                   
 87.71   0.00  94.71  59.45  59.03  20832 1961.089   121   74.676 2035.765 Allocation Failure   No GC               
 87.71   0.00  94.71  59.45  59.03  20832 1961.089   121   74.676 2035.765 Allocation Failure   No GC               
 87.71   0.00  94.71  59.45  59.03  20832 1961.089   121   74.676 2035.765 Allocation Failure   No GC               
 87.71   0.00  94.71  59.45  59.03  20832 1961.089   121   74.676 2035.765 Allocation Failure   No GC               
 87.71   0.00  94.71  59.45  59.03  20832 1961.089   121   74.676 2035.765 Allocation Failure   No GC               
正好对应JVM 的内存分代


 图中参数含义如下: 
    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 — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒) 






jmap是java自带的工具


查看整个JVM内存状态 
jmap -heap [pid]
要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起


查看JVM堆中对象详细占用情况
jmap -histo [pid]


导出整个JVM 中内存信息  内存快照
jmap -dump:format=b,file=文件名.hprof [pid]
或者
jmap -dump:format=b,file=文件名.dump [pid]
然后内存分析工具分析 
java 有个自带的 jvisualvm.exe 可以分析


打开 jvisualvm  然后 文件 > 装入 > 选择文件类型  最后导入






jstack
jstack 是sun JDK 自带的工具,通过该工具可以看到JVM 中线程的运行状况,包括锁等待,线程是否在运行
执行 jstack [pid] ,线程的所有堆栈信息


"http-8080-10" daemon prio=10 tid=x0a949bb60 nid=0x884  waiting for monitor entry [...]


"http-8080-10" 这个线程处于等待状态。 waiting for monitor entry 如果在连续几次输出线程堆栈信息都存在于同一个或多个线程上时,则说明系统中有锁竞争激烈,死锁,或锁饿死的想象。




“http-8080-11” daemon prio=10 tix=xxx nid=xxx in object.wait() [...]
 java.lang.Thread.State:waiting (on object monitor)
该表示http-8080-11的线程处于对象的Wait 上,等待其他线程的唤醒,这也是线程池的常见用法。


“Low Memory Detector”daemon prio=10 tix=xx nid=xxx runnable [...] java.lang.Thread.State:runnable
表示“Low Memory Detector” 的线程处于Runable状态,等待获取CPU的使用权.


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值