【软件构造】第八章第二节 动态程序分析方法与工具

第八章第二节 动态程序分析方法与工具

Outline

  • Java性能调优工具:
    • jstat
    • jmap
    • jhat
    • Vistual VM
    • MAT
  • Memory dump
  • Stack trace

Notes

 ## Java性能调优工具

  • Jstat:获取JVM的Heap使用和GC的性能统计数据,命令如-gcutil
  • Jmap:输出内存中的对象分布状况  如:jmap -clstats
  • Jhat:导出heap dump,浏览/查询其中的对象分布状况
  • jstack:获取Java线程的stack trace 具体用途以下:
    • 定位线程出现长时间停顿的缘由,如多线程间死锁、死循环、请求外部资源 致使的长时间等待等。
    • 线程出现停顿的时候经过jstack来查看各个线程的调用堆栈,就能够知道没 有响应的线程到底在后台作什么事情,或者等待什么资源。
  • Visual VM:提供了一个可视化界面,用于查看Java应用程序在JVM上运行时的详细信息,使用各类技术,包括jvmstat,JMX,Serviceability Agent(SA)和Attach API等
  • MAT:内存堆导出文件的分析工具,生成饼状图等,可以对问题发生时刻的系统内存状态获取一个总体印象,找到最有可能致使内存泄露的对象,进一步查看其是否有异常行为。

 

## Memory Dump(堆转储文件)

转自    爪哇堂的博客html

  正如Thread Dump文件记录了当时JVM中线程运行的状况同样,Heap Dump记录了JVM中堆内存运行的状况,可以使用jmap或JConsole命令生成,jhat分析。java

【使用 jmap 命令生成】多线程

jmap 命令是JDK提供的用于生成堆内存信息的工具,能够执行下面的命令生成Heap Dump:oracle

jmap -dump:live,format=b,file=heap-dump.bin <pid>

其中的pid是JVM进程的id,heap-dump.bin是生成的文件名称,在执行命令的目录下面。推荐此种方法。jvm

【使用JConsole生成】工具

 JConsole是JDK提供的一个基于GUI查看JVM系统信息的工具,既能够管理本地的JVM,也能够管理远程的JVM,能够经过下图的 dumpHeap 按钮生成 Heap Dump文件。性能

 

【使用jhat分析】spa

jhat 是JDK自带的用于分析JVM Heap Dump文件的工具,使用下面的命令能够将堆文件的分析结果以HTML网页的形式进行展现:.net

jhat <heap-dump-file>

其中 heap-dump-file 是文件的路径和文件名,能够使用 -J-Xmx512m 参数设置命令的内存大小。执行成功以后显示以下结果:线程

Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

这个时候访问 http://localhost:7000/ 就能够看到结果了。

 

## Stack Trace

  可以使用jstack查看,定位线程出现长时间停顿的缘由。

相关文章
相关标签/搜索