通过JRockit Mission Control追踪JDBC执行情况

先决条件

  • 已安装了Oracle JRockit 虚拟机
  • 安装WebLogic Server时也安装了随时示例,因为下面我们将用medrec示例程序测试

配置脚本

找到%WL_HOME%\samples\domains\medrec\bin目录下的setDomainEnv.cmd脚本,做如下修改:

1. 确认使用JRockit作为Java虚拟机

将BEA_JAVA_HOME指向JRockit安装目录,例如:

set BEA_JAVA_HOME=S:\jdk\64\jrockit-jdk1.6.0_22-R28.1.1-4.0.1

在set SUN_JAVA_HOME下方加入:

set JAVA_VENDOR=Oracle

2. 在脚本未端加入如下代码:

if “%JAVA_VENDOR%”==”Oracle” (
    set JAVA_VM=%JAVA_VM% -Xmanagement:ssl=false,authenticate=false,port=7091,autodiscovery=true
)

配置Mission Control

1. 执行%JAVA_HOME%\jrmc.exe

2. 创建“连接器”

conn

3. 右键点击刚刚创建的连接“localhost”,选择:启动飞行记录

rec

点击“高级”,去掉“仅显示模板设置”,然后左边选择WebLogic,右侧去掉“已启用”,然后在左边找到“JDBC”,在右侧选择“已启动”,如下图:

rec2

点击确认

模拟测试

打开浏览器,输入网址:http://localhost:7011/medrec/,根据页面提示,反复操作。

查看追踪结果

左边只选择“JDBC”,右边选择“WebLogic Server / JDBC /JDBC Statement Execute –SQL”,我们可以清楚地看到执行了哪些SQL语句以及执行时间等信息。

ret

(完)

Java与64位架构

硬件、操作系统、Java虚拟机关系

64bit

如图所示,底层是64位的,上层可以选择32位的;反过来则不行。可以看出,要想安装64位的JVM,操作系统和硬件必须都是64位的才行。

Heap Size与GC的关系

64bit_2

可以看出,Heap=1.5G时的GC所占用的时间几乎是Heap=13.5G的5倍。也就是说,Heap=13.5G时的吞吐率是Heap=1.5G时的5倍。
但是,评估GC好坏的另一个指标是GC暂停时间,而GC暂停时间与两个因素有关:Heap大小和“活对象“的数量。一方面,Heap越大,GC暂停时间越长;另一方面,Heap越大,“活对象“的数量越小,数据访问集中在内存中,访问硬盘的几率很小,因此GC暂停时间越小。

32位到64位移植问题

从32位移植到64位的主要问题是JNI native code。如果使用了32位的JNI native code,则移植到64位上会有问题,因为32位的JNI native code无法运行在64位的操作系统中。你需要在64位平台上重新编译32位的JNI native code,如果你有源代码。如果没有源代码,则无法移植。

参考资料

(完)

IBM JDK OutOfMemoryError

一个客户使用的是Oracle BPM 10.3(即:以前的BEA AquaLogic BPM,其前身是Fuego)for WebSphere,最近出现每半小时重启一次的问题,经过分析最终定位是IBM JDK升级造成的,同时找到以下信息:

NOTE: Only for Java 5.0 Service Refresh 4 (build date:February 1st, 2007) and older. When you use delegated class loaders, the JVM can create a large number of ClassLoader objects. On IBM Java 5.0 Service Refresh 4 and older, the number of class loaders that are permitted is limited to 8192 by default and an OutOfMemoryError exception is thrown when this limit is exceeded. Use the -Xmxcl parameter to increase the number of class loaders allowed to avoid this problem, for example to 25000, by setting -Xmxcl25000, until the problem is resolved. Please examine the current thread stack trace to check whether a class loader is being loaded if there is an OutOfMemoryError. For example, the following stack trace indicates that a class loader is being loaded: at com/ibm/oti/vm/VM.initializeClassLoader(Native Method) at java/lang/ClassLoader. (ClassLoader.java:120)

……

这里至关重要的一个参数是:-Xmxcl。上面的意思就是Java 5.0 SR4及以前的版本,这个参数默认是8192,如果类加载器加载的类超过这一数值就会报OutofMemoryError。解决办法就是不断的增加些值,直到找到一个合理数值。

注:Oracle BPM 10.3平台认证信息参考:

《Release Notes for Oracle Business Process Management 10gR3》

(完)