1 基础故障处理工具
jps可以用来输出JVM中运⾏的进程状态信息,显示指定系统内所有的HotSpot虚拟机进程。
jstat JVM统计信息监视工具,可以⽤于持续观察虚拟机内存中各个分区的使⽤率以及GC的统计数据。⽤于⽣成java虚拟机当前时刻的线程快照。
jinfo 作用是实时查看和调整虚拟机各项参数(配置信息)。
jmap ⽤于⽣成heap dump⽂件,可以用来查看堆内存的使⽤详情。
jstack可以用来查看Java进程内的线程堆栈信息,结合应⽤⽇志可以迅速定位到问题线程。
jhat JVM Heap Analysis Tool命令是与jmap搭配使⽤,⽤来分析jmap⽣成的dump,jhat内置了⼀个微型的HTTP/HTML服务器,⽣成dump的分析结果后,可以在浏览器中查看。
2 可视化故障处理工具
JConsole Java监视与管理控制台,监视本地和远程JVM,通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整。
VisualVM 多合-故障处理工具,提供有关在Java虚拟机中运行的基于Java技术的应用程序的详细信息,提供内存和CPU分析,堆转储分析,内存泄漏检测,访问MBean和垃圾回收。
Java Mission Control(JMC) 可持续在线的监控工具,客户端包括用于监视和管理Java应用程序的工具。可以分析本地应⽤以及连接远程ip使⽤。提供了实时分析线程、内存,CPU、GC等信息的可视化界⾯。
3 JVM内存调优
对JVM内存的系统级的调优主要的⽬的是减少GC的频率和Full GC的次数。过多的GC和Full GC是会占⽤很多的系统资源(主要是CPU),影响系统的吞吐量。
使⽤JDK提供的内存查看⼯具,⽐如JConsole和Java VisualVM。
1)监控GC的状态,使⽤各种JVM⼯具,查看当前⽇志,并且分析当前堆内存快照和gc⽇志,根据实际的情况看是否需要优化。
2)通过JMX的MBean或者Java的jmap⽣成当前的Heap信息,并使⽤Visual VM或者Eclipse⾃带的Mat分析dump⽂件。
3)如果参数设置合理,没有超时⽇志,GC频率GC耗时都不⾼则没有GC优化的必要,如果GC时间超过1秒或者频繁GC,则必须优化。
4)调整GC类型和内存分配,使⽤1台和多台机器进⾏测试,进⾏性能的对⽐。再做修改,最后通过不断的试验和试错,分析并找到最合适的参数。