前面已经讲解了内存分配与回收技术,接下来两章,将从实践角度去了解虚拟机内存管理的世界。由于工具的不断优化,对于历史工具的介绍就一带而过。分析问题时可从这些内容下手:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。
第一代:JDK的命令行工具
工具位置:jdk所在目录的bin文件夹下。
工具用法:以Windows为例,运行cmd,打开对应的工具即可。
1.jsp:虚拟机进程状况工具
功能:可列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。
常见用法:
jps -l:输出主类全名
jps -v:输出虚拟机进程启动时显式指定的JVM参数
2.jstat:虚拟机统计信息监视工具
功能:监视虚拟机各种运行状态信息。
常见用法:
jstat -gc:监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代等的容量,已用空间,GC时间合计等信息
3.jinfo:Java配置信息工具
功能:实时查看和调整虚拟机各项参数。
4.jmap:Java内存映射工具
功能:生成堆转储快照。
常见用法:
jmap -dump format=b, file=eclipse.bin 3500(查询到的本地虚拟机唯一ID)
5.jhat:虚拟机堆转储快照分析工具
功能:与jmap搭配使用,来分析生产的堆转储快照。
常见用法:很少用,替代工具太多。
6.jstatck:Java堆栈跟踪工具
功能:用于生成虚拟机当前时刻的线程快照,主要用于分析定位线程出现长时间停顿的原因。
常见用法:
jstack -l:除了堆栈外,显示关于锁的附加信息。
第二代工具:JConsole:Java监视与管理控制台
工具位置:jdk所在目录的bin文件夹下。
工具用法:以Windows为例,双击执行。
1.启动JConsole
启动后,会自动搜索出本机运行的所有虚拟机进程,不需使用jps命令来查询了。
“概述”页标签:显示整个虚拟机主要运行数据的概览,其中包括“堆内存使用情况”、“线程”、“类”、“CPU使用情况”四种信息的曲线图,这些曲线图是后面“内存”、“线程”、”类“页签的信息汇总。
”内存“页标签:相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势。
”线程监控“页标签:相当于可视化的jstack命令,遇到线程停顿时可使用这个页签进行监控分析。
第三代工具:VisualVM:多合一故障处理工具
简介:
a)除了运行监控、故障处理外,还提供很多其他方面的功能,如性能分析(Profiling)。
b)功能异常强大,可比肩JProfiler等专业收费工具。对应用程序实际性能影响很小,可直接应用在生产环节。
c)具备插件扩展功能。