CHINA
JProfiler 入门教程
V1.1 适用于 JProfiler 7.1.2
作者:赵磊 博客:183c782f0722192e4536f631/ 2012/8/8
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
目录
一、JProfiler 介绍 ..................................................................................................................................................... 4 二、启动 JProfiler 7 ................................................................................................................................................... 4 2.1 Quick Start 菜单 ................................................................................................................................................ 4 2.2 Srart Center 菜单 .............................................................................................................................................. 5 2.2.1 Srart Center-> Open Session 菜单介绍 ....................................................................................................... 5 2.2.2 使用 JProfiler 自带的示例演示内存泄露和线程阻塞 .............................................................................. 5 2.2.3 Srart Center-> New Session 菜单介绍 ...................................................................................................... 14 三、JProfiler 的监控方式介绍: ............................................................................................................................. 14 1. 等待模式 ......................................................................................................................................................... 14 2. 非等待模式 ..................................................................................................................................................... 14 3. 离线模式 ......................................................................................................................................................... 14 四、JVM 工具接口(JVM TI)介绍 .............................................................................................................................. 15 五、服务端 JProfiler 代理工具(Agent)加载原理................................................................................................... 15 六、创建监视本地 Tomcat 的工程(等待模式) .................................................................................................. 15 6.1 进入创建菜单................................................................................................................................................ 16 6.2 选择使用的服务器容器 ................................................................................................................................. 16 6.3 选择 Tomcat 容器的位置 ..........................................................................................................................
.... 17 6.4 选择虚拟机类型............................................................................................................................................. 18 6.5 确认启动监控的方式 ..................................................................................................................................... 19 6.6 选择容器启动脚本 ........................................................................................................................................ 20 6.7 选择监控端口................................................................................................................................................ 21 6.8 最后确认信息................................................................................................................................................ 22 6.9 启动容器 ....................................................................................................................................................... 23 七、创建监视远程 Tomcat 的工程(等待模式) .................................................................................................. 24 7.1 测试环境 ........................................................................................................................................................ 24 7.2 JProfiler 软件下载地址 ................................................................................................................................... 24 7.3 客户端 JProfiler 安装 .................................................................................................................................... 24 7.4 服务器端 JProfiler 安装 ................................................................................................................................ 24 7.5 客户端连接配置............................................................................................................................................. 25
2
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
八、创建监视远程 Tomcat 的工程(非等待模式)............................................................................................... 26 九、创建监视远程 Java 程序的工程 ....................................................................................................................... 26 十.其它内容 .......................................................................................................................................................... 27 10.0 局域内使用同一个 license key 问题............................................................................................................ 27 10.1 JProfiler 对程序性能的影响 ......................................................................................................................... 28
3
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
一、JProfiler 介绍
JPro
filer 是一个非常优秀的的 JVM 分析工具,可监视本地和远程的 JVM,适用于各种操作系统。 常用的功能有: 1、 监视堆内存占用情况和创建对象实例的数量找出内存泄露。 2、 监视占用 CPU 较多的方法 3、 监视线程的阻塞与死锁 4、 监视 GC 的耗时。 监视本地 JVM(Windows) : 需要安装 JProfiler windows 版本 监视远程的 JVM(Linux): 客户端需要安装 JProfiler windows 版本 服务需要安装 JProfiler Linux 版本 客户端与服务端通过 socket 通信 JProfiler 软件下载地址: 183c782f0722192e4536f631/ 183c782f0722192e4536f631/download/jprofiler/files (不需要注册就可以下载) 本文以 JProfiler 7.1.2 为例进行讲解。
二、启动 JProfiler 7
2.1 Quick Start 菜单
每次启时弹出 “快速启动” 菜单, 它的不重要, 可以关闭它。 “快速启动” 菜单能实现的功能在后面的 Srart Center 菜单中都可以实现。 在菜单的第一选项就是示例工程和你以前保存过的工程。
4
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
2.2 Srart Center 菜单
2.2.1 Srart Center-> Open Session 菜单介绍
主菜单->session->Srart Center 是创建与管理监视项目的总入口, 是最常用的功能。如下图:
每次打开,默认展示的是第一个选项卡“Open Session” 。在菜单的第一选项卡“Open Session”中是示例工程 和你以前保存过的工程。如下图:
其中 Animated 是一个监视 Swing 动画的演示、JDBC 是一个监视 JDBC 的演示、Applet 是一个监视网页小程序 演示。
2.2.2 使用 JProfiler 自带的示例演示内存泄露和线程阻塞
我们来演示内存泄露和线程阻塞,主菜单->session->Srart Center-> Open Session 窗口中,选第一个示例项目 Animated Beaier Curve Demo,点击 Start 按钮,在下一个窗口中都使用默认值,按 OK 按钮。这时示例程序就开始运 行了,你就可以监视 JVM 的状态了。并且可以手动控制是否开始 模拟内存泄露,和模拟线程阻塞的情况。 我们就以这个示例,来讲解 JProfiler 的入门使用方法。 运行起来后情况如下图:
5
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
在下图中有前两个复选框,可以模拟内存泄露,线程阻塞的情况。 Leak memory: 模拟内存泄露 Simulate blocking : 模拟线程阻塞
6
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
2.2.2.1 监视堆内存的增长情况 经过长时间的运行,发现如下图的情况: 下图:前半部分是模拟内存泄露,后半部分是关闭了模拟内存泄露。可发现内存泄露时 Heap 内存呈增长趋势。可 在大方向上发现存在内存泄露,但不知是具体原因什么引起的。
2.2.2.2 查看内存中对象的实例数量
点击如下图的菜单,可以开始查看内存中对象的实例数量
查看内存中对象的实例数量,找出不
能被回收的对象。经过长时间的观察,下图中的 HashMap$Entry 实例数量
7
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
一直在增长,最早时 HashMap$Entry 数量是 1 万左右,现在是 16 万多。可以断定就是它没有被释放。 不一定数量最多的实例就是泄露,要根据业务情况分析。如果 1 个用户登录操作数据库,创建了一个连接,用户退 出后,这个连接实现数量没有-1 (你开发时设计的会-1) ,就正明发生了泄露。 可以通过包名过滤,只显示你开发的类,这个功能是非常有用的。
查看实例数量增长趋势图 1:
8
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
查看实例数量增长趋势图 2:
9
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
2.2.2.3 查看实例被谁引用
在左侧的主菜单 ,选 Heap Walker, 并点相机图标
开始。
在下图中, 可以通过鼠标右键打开快捷菜单 ,选择 Use Selected Instances
10
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
选择引用的方向,见下图:
来一张清晰的图:
11
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
当前对象实例被谁引,引用了谁,请看下图:
2.2.2.4 监视线程的阻塞情况 下图左边的蓝框中没有红色线段,表明没有发生线程阻塞 下图右边的蓝框中有红色线段,表明发生了线程阻塞 只知道发生阻塞的线程名,但不知道具体原因。
12
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
2.2.2.5 找出线程阻塞的点 可以记录历史,一步一步的看,像看慢镜头一样。
到这里,通过 JProfiler 自带的演示程序 ,已经了解了 JProfiler 的基本使用技巧。看到这里已经算是入门了。
13
JProfiler 7.1.2 使用教程
赵磊 2012-08-07
2.2.3 Srart Center-> New Session 菜单介绍
Srart Center-> New Session 选项卡,是最主要昊常用的功能。 New Session 按钮: 是用于监控 GUI 类型的程序或 Applet 等不需要服务器容器的应用程序 New Server Integration 按钮: 是用于监控服务器容器应用的 New Remote Integration 按钮: 同下 New Applet Integration 按钮: 是对于 New Server Integration 的快捷键,他们直接跳过了使用 New Server Integration 的前几个步骤,使用了默认值。 所以 New Server Integration 按钮才是我们每天最常用的。只要熟悉了它的,就 OK 了。后面主要讲它。
三、JProfiler 的监控方式介绍:
使用 JProfiler 监视 JVM 时,对连接的时机控制有以下几种:
1. 等待模式
wait for a connection from the Jprofiler GUI,此模式为,在启动容器(Weblogic/Tomcat)时,需要等 Jprofiler 连接后才 能启动; JVM TI 是采用事件通知方式告知 JProfiler 相关的 Jvm 的状态变化,等待模式可以不漏掉通知。

