一、JVM监控工具
- JConsole:实时监控Java进程的堆年轻代、堆老年代、栈内存占用量、线程数、类加载数、CPU占用率。可以手动GC、检查线程的死锁。
- Java VisualVM:可以导入OOM发生后系统自动生成的dump快照文件,从而分析哪个线程导致的OOM。可以实时监控垃圾回收器导致的各分区内存变化。
二、监控命令
jps:查看所有运行的Java进程pid和名称jstat [-class -gc ...] pid:JConsole底层就是这个命令,查看JVM实时信息一般用-gc查看堆各分区的使用状况和GC次数.jmap -heap <pid>:查看JVM的堆内存 使用情况,包括堆中各分区容量、已用字节数。jmap -histo <pid>:查看JVM堆内存 中各个类的对象数量和内存占用。jmap -dump <pid>:生成堆内存当前时刻存储的快照dump。jstack pid | grep ppid:查看指定进程对应线程 的快照,包括调用栈、线程状态、锁持有情况。jstack用于查看JVM中所有线程的运行状态。
三、JVM常见参数
-
-Xms:初始堆大小 -
-XX:NewSize:设置年轻代大小 -
-XX:NewRatio:设置年轻代和老年代的比值 -
-XX:SurvivorRatio:设置年轻代中Eden区与两个Survivor的比值 -
-XX:+UseParallelGC:设置CMS收集器 -
-XX:+UseParallelOldGC:设置CMS老年代收集器 -
-XX:+UseG1GC:设置G1收集器 -
-XX:ParallelGCThreads:垃圾回收时使用的并行GC线程数 -
-XX:MaxGCPauseMillis:最大GC停顿时间,超出时间GC会提前结束 -
-XX:GCTimeRatio:垃圾回收时间占程序总运行时间的比例目标