用于 PowerPC 上的 Linux 的五个易用的性能分析工具(5)
- UID
- 1066743
|
用于 PowerPC 上的 Linux 的五个易用的性能分析工具(5)
JLMJLM 工具提供 Java 程序中对锁的统计数据。这些统计数据包括锁被请求的方式、锁被持有的总时间以及锁被持有的平均时间。它可以与 IBM 32 位和 64 位的 Runtime Environment for Linux v1.4.0 和更新的版本一起使用。JLM 工具不能与非 IBMJVM 一起使用,因为这个工具使用了 IBM 对 JVM Profiler Interface(JVMPI)的扩展。
JLM 是 Java 剖析器所提供的一个专门功能,后者通常称作 jprof。Java 剖析器在 PowerPC 上实现为 libjprof.so 库。基于套接字的命令行应用程序 rtdriver 提供了访问 Java 剖析器的接口。类似于其他 Performance Inspector 工具,可以在 /piperf/bin 目录中找到 rtdriver 和 libjprof.so。
如何运行 JLM?- 首先需要运行您的 Java 程序。需要使用 Xrunjprof:socket 标记来启动 Java 剖析器。例如,如果您的Java 类命名为 MyJava,则执行命令:
1
| # java –Xrunjprof:socket MyJava
|
- 运行 rtdriver 应用程序(传递给下面的命令的 -l 标记是小写字母 l,不是数字 1):
- 当 rtdriver 应用程序连接到本地主机后,它将显示一个 Command> 提示符。在提示符中输入下面的命令来通知 Java 剖析器开始收集锁统计数据:
- Java 剖析器可以在任何时刻生成关于当前锁统计数据的报告。另外,您还可以在同一个 rtdriver 会话中生成多个报告。每个报告都将存储在当前工作目录中的 log_jlm.#_pppp 文件中,其中的 # 是报告的序列号,从 1 开始是第一个报告,然后接下来每个报告增 1, pppp 指的是进程的 id。在 Command> 提示符中输入下面的命令以生成一个报告:
- 当您停止收集锁统计数据时,在 Command> 提示符中输入下面的命令:
- 在 Command> 提示符中输入下面的命令以退出 rtdriver:
如何解读 JLM 报告?下面的内容摘录自一个 log-jlm 文件:
1
2
3
4
5
6
7
8
9
| Java Lock Monitor Report
Version_5.0
Built : (Tue Apr 27 13:57:19 PDT 2004)
Platform : (Linux-ppc64)
JLM_Interval_Time 26896040
System (Registered) Monitors
%MISS GETS NONREC SLOW REC TIER2 TIER3 %UTIL AVER-HTM MON-NAME
0 4 2 0 2 0 0 0 26898 Monitor Cache lock
0 2 2 0 0 0 0 1 151640 Thread queue lock
|
报告包括三个部分,一个头,随后是两部分:System(Registered)Monitors 和 Java(Inflated)Monitors。System(Registered)Monitors 中的锁由 JVM 及其组件持有,Java(Inflated)Monitors 中的锁由用户 Java 程序持有。为简短起见,前面的摘录中略去了 Java(Inflated)Monitors 部分,不过,Java(Inflated)Monitors 中的锁的统计数据解释与 System(Registered)Monitors 部分所展示的锁完全相同。
头中包含的是关于 JLM 工具的信息,包括运行的工具的版本,工具是何时编译的,以及工具所运行的平台。JLM_Interval_Time 域中包含的是自执行 jlmstart 命令到执行 jlmdump 命令期间所发生的时基节拍数。
接下来,报告显示了 System(Registered)Monitors 的统计数据。需要对这些统计数据做一下关于锁被请求的方式的简短说明。可以通过两种方式( 递归地或 非递归地)的其中一种来请求锁。如果锁是以递归方式被请求,那么发出请求的线程已经持有了它。如果锁是以非递归方式被请求,则发出请求的线程还没有持有它。有两种类型的非递归锁:快的和慢的。快锁是立即被请求的,没有等待。慢锁由另一个线程持有,在可以被请求之前必须被那另一个线程释放掉。
System(Registered)Monitors 图表中的统计数据可以如下解释。图表中的每一行指的是一个不同的锁。锁的名称可以在右侧的 MON-NAME 栏中找到。
栏意义%MISS锁以非递归方式被请求但是不得不等待的次数百分比。计算公式为 %MISS = 100 * (SLOW / NONREC)GETS锁被请求的次数。计算公式为 GETS = FAST + SLOW + RECNONREC锁以非递归方式被请求的次数SLOW锁以非递归方式被请求但是不得不等待的次数REC锁以递归方式被请求的次数TIER2 and TIER3由于这一信息不用于 PowerPC,所以可以忽略它%UTIL从执行 jlmstart 命令到执行 jlmdump 命令期间锁被持有时间所占的百分比。计算公式为 100 * (Hold_Time / JLM_Interval_Time),其中 Hold_Time是锁被持有时发生的时基节拍数目 AVER-HTM在每一次非递归请求期间锁被持有时发生的平均时基节拍数目 |
|
|
|
|
|