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的使用权.
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的使用权.