最近要研究用DTrace跟踪Java。先初步运行JDK 6里面带的DTrace例子脚本跟踪JDK Demo,结果任何probe返回值都只有0,或者没有返回。我用的是OpenSolaris 2008.11。
以下是我已经做过的:
hanbf@opensolaris:~$ java -version
java version "1.6.0_10"
Java(TM) Platform, Standard Edition for Business (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode)
hanbf@opensolaris:~$ dtrace -V
dtrace: Sun D 1.6.2
hanbf@opensolaris:~/java/sample/dtrace/hotspot$ pfexec ./hotspot_calls_tree.d -v -c "java -XX:+ExtendedDTraceProbes -jar /export/home/hanbf/java/demo/jfc/Java2D/Java2Demo.jar"
Stability attributes for script ./hotspot_calls_tree.d:
Minimum Probe Description Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: ISA
Minimum Statement Attributes
Identifier Names: Unstable
Data Semantics: Unstable
Dependency Class: Common
BEGIN hotspot probes tracing
之后,Java2D的demo运行了10分钟,DTrace没有任何输出。
我还试验了跟踪GC,一样的结果:
hanbf@opensolaris:~/java/sample/dtrace/hotspot$ pfexec ./gc_time_stat.d -c "java -jar /export/home/hanbf/java/demo/jfc/Java2D/Java2Demo.jar"
BEGIN hotspot GC tracing
GC statistics, time: 2009 Mar 22 22:02:21
manager | pool | total time
---
total | 0
manager | pool | # of calls
---
total | 0
程序运行了一段时间,刷新出的结果始终是0。
很疑惑,我做错了什么吗?希望有经验的版友帮忙,谢谢了!
------最佳解决方案--------------------------------------------------------
我对dtrace跟踪应用程序不是很熟,不过我已经将你的问题转发给了我的同事,希望他们能帮助你,有答案后我会post上来。
------其他解决方案--------------------------------------------------------
多谢hotsolaris的帮助,今天找到了答案,是OpenSolaris的一个bug,具体可以参见下面的链接。
http://opensolaris.org/jive/thread.jspa?messageID=318395
再次感谢。
------其他解决方案--------------------------------------------------------
是的,在Nevada上不存在这样的问题。