概述
显示jvm运行时的参数,Java版本,以及系统属性。监控
显示当前这个pid的cpu,堆,PermGen,类,线程的运行情况,可以主动进行垃圾回收,以及生成此时刻的dump文件。线程
显示所有线程的“实时”状态(运行,休眠,等待,监视)以及时间,(调整好刷新时间),可以通过放大,放小,更细致的观察线程的状态,以及一个线程详细的时刻状态和线程dump堆栈。抽样器
随机抽样快速检测,显示各个方法和线程的cpu耗时,以及堆区各个实例、方法区各个类、以及每个线程所占内存详细信息。
Profiler
功能和抽样器差不多,只不过是全面检测,比较慢而已(类似杀毒软件的快速扫描和全盘扫描)。
OOM在JVM中发生的地方只有堆,栈,方法区,直接内存。
Java程序大多发生OOM是在堆区域,堆dump 是分析内存堆的唯一文件,可以由VisualVm,IBM HeapAnalyzer,Jhat,Eclipse MemoryAnalyzer等分析,这里单独介绍VisualVm。
案例:堆内存的OOM
设置JVM 启动参数 -Xmx1024m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/dump
(其中堆 1,073,741,824个字节,字节与m相差大约6个倍数)运行下面程序,则会发生OOM的时候,生成堆文件,目录在d盘dump文件夹下(或者设置VisualVm中右键该应用,发生OOME自动生成dump)。
当然生产的时候,并不是等到OOM才生成dump文件,直接用 jmap -dump:format=b,file=xxx.hprof 24331
jmap是jdk自带工具,format=b是代表二进制,file代表生成路径 24331代表pid,可以用 ps -ef | grep 进程名
找到 ,当然jmap还有很多功能,查看JVM堆对象占用情况,JVM内存状态等,这里不多介绍。
packa