在网上有不少关于WebLogic Native IO问题的文章,我挑选了3个最典型的例子做一下总结说明:以下的3个案例,虽然都跟Native IO有关,但实际情况不太相同,有相应平台32位跟64位的问题,也有执行权限的问题,希望读者能仔细去辨别。
a) 平台信息:
OS:AIX5308
JDK:java5_64
WLS:BEA Weblogic Server 10.0
b) 故障现象:
1.启动Weblogic时,服务器启动日志中报如下错误:
<Error> <Socket> <BEA-000438> <Unable to load performance pack. Using Java I/O instead.
Please ensure that libmuxer library is in :’
/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java5_64/jre/bin/classic:/usr
/java5_64/jre/bin
:/weblogic/bea/wlserver_10.0/server/native/aix/ppc:/usr/java5_64/jre/bin/j9vm
:/usr/lib’
2. 同时,在系统使用过程中,报如下错误:
<Warning> <Socket> <BEA-000402> <There are: 5 active sockets, but the maximum number of socket reader threads allowed by the configuration is: 4.
You may want to alter your configuration.>
c) 故障分析:
根据经验,以上报错信息表明Weblogic Native IO启动失败。
d) 故障解决:
1. Weblogic Native IO 启用失败,通常是由于系统没有使用与Weblogic 相对应的的JDK版本所致。
2. AIX Weblogic 支持32位和64位的JDK,如果使用64位版本的JDK,需在启动脚本中加指向64位对应的目录,
同时在 commEnv.sh 配置文件中,/weblogic/bea/wlserver_10.0/common/bin|commEnv.sh
AIX)
if [ -n "${LIBPATH}" ]; then
LIBPATH=${LIBPATH}:${WL_HOME}/server/native/aix/ppc64
else
LIBPATH=${WL_HOME}/server/native/aix/ppc64
fi
LIBPATH=${PATCH_LIBPATH}:${LIBPATH}
export LIBPATH
WEBLOGIC 默认的指向是ppc目录,不是ppc64目录,当时为了下载64位的libmuxer.so浪费了很长的时间,后来发现weblogic的目录下面已经存 在64位的。
3. 使用 Weblogic Native IO 对系统性能至少有30%的提升,在生产环境中,注意检查 Native IO 是否可用。同时在安装Weblogic时,注意使用与之相对于版本的JDK。
3.12 典型案例二
a) 平台信息:
HP-UX
Weblogic923
b) 故障现象:
1.当Weblogic Native IO 启用失败时,通常会在服务器启动日志中报如下错误:
####<Mar 31, 2009 9:09:29 PM GMT+08:00> <Debug> <RJVM> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238504969950> <BEA-000571> <Network Configuration Detail for Channel "managered_server1"
Channel Weight 50
Accept Backlog 50
Login Timeout 5000ms
Max Message Size 10000000
Message Timeout 60s
Idle Timeout 65s
Tunneling Timeout 40s
Tunneling Ping 45s>
####<Mar 31, 2009 9:09:29 PM GMT+08:00> <Info> <Server> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238504969974> <BEA-002609> <Channel Service initialized.>
####<Mar 31, 2009 9:09:29 PM GMT+08:00> <Error> <Socket> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238504969989> <BEA-000438> <Unable to load performance pack. Using Java I/O instead. Please ensure that a native performance library is in: ‘/weblogic/opt/java1.5/jre/lib/IA64N:/weblogic/opt/java1.5/jre/lib/IA64N/server:
/weblogic/opt/java1.5/jre/../lib/IA64N:/weblogic/bea/patch_weblogic920/profiles
/default/native:
/weblogic/bea/weblogic92/server/native/hpux11/IPF32:/weblogic
/bea/weblogic92
/server/native/hpux11/IPF32/oci920_8:/usr/lib’
>
2. 同时,在系统使用过程中,常见报如下错误:
####<Apr 1, 2009 8:25:18 PM GMT+08:00> <Warning> <Socket> <odsapp1> <managered_server1> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1238588718157> <BEA-000402> <There are: 5 active sockets, but the maximum number of socket reader threads allowed by the configuration is: 4. You may want to alter your configuration.>
####<2009-4-3 下午09时25分55秒 GMT+08:00> <Error> <HTTP> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’4′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238765155550> <BEA-101019> <[weblogic.servlet.internal.WebAppServletContext@1f5acd0 - appName: 'ODSWeb', name: 'ODSWeb', context-path: ''] Servlet failed with IOException
java.net.SocketException: 管道断开 (errno:32)
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:97)
at java.net.SocketOutputStream.write(SocketOutputStream.java:141)
at weblogic.utils.io.ChunkedOutputStream.writeTo(ChunkedOutputStream.java:185)
at weblogic.servlet.internal.ResponseHeaders.writeHeaders(ResponseHeaders.java:348)
at weblogic.servlet.internal.ServletResponseImpl.writeHeaders(ServletResponseImpl.
####<Apr 3, 2009 11:11:49 AM GMT+08:00> <Error> <HTTP> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’10′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238728309518> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@b9614d - appName: 'ODSWeb', name: 'ODSWeb', context-path: ''] Root cause of ServletException.
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:574)
at javelin.client.ThreadPool.<init>(ThreadPool.java:49)
at javelin.client.ClientUtilsImpl.<init>(ClientUtilsImpl.java:92)
at javelin.client.ClientUtilsImpl.get(ClientUtilsImpl.java:106)
at com.bea.compiler.client.ClientUtils.get(ClientUtils.java:36)
c) 故障分析:
该故障很明显是在HP-UX上WebLogic Native IO启动失败。
d) 故障解决:
1. Weblogic Native IO 启用失败,通常是由于系统没有使用与Weblogic 相对应的的JDK版本所致。
2. 应当值得注意的是,在HP-UX中,通常存在 PA-RISC和Itanium两个版本的Weblogic,如果在PA-RISC平台安装Itanium平台版本的Weblogic,或者在 Itanium平台安装PA-RISC平台版本的Weblogic,同样会导致 Native IO 不可用。
3. HP-UX Weblogic 9.2 支持32位和64位的JDK,如果使用64位版本的JDK,需在启动脚本中加 -d64 参数,同时在commEnv.sh 配置文件中,注意修改“/weblogic/bea /weblogic92/server/native/hpux11 /IPF32”,使其指向“/weblogic/bea/weblogic92/server/native/hpux11/IPF64”,否则会也会导致 Native IO 启用失败 。
4. 使用 Weblogic Native IO 对系统性能至少有30%的提升(这个BEA 工程师说的),在生产环境中,注意检查 Native IO 是否可用。同时在安装Weblogic时,注意使用与之相对于版本的JDK。
3.13 典型案例三
a) 平台信息:
HP-UX
Weblogic90
b) 故障现象:
启动过程中发现
<Apr 28, 2010 6:27:15 PM GMT+08:00> <Error> <Socket> <BEA-000438> <Unable to loa
d performance pack. Using Java I/O instead. Please ensure that a native performa
nce library is in: ‘/opt/java1.5/jre/lib/IA64N:/opt/java1.5/jre/lib/IA64N/server
:/opt/java1.5/jre/../lib/IA64N::/opt/weblogic/bea/weblogic90/server/native/hpux1
1/IPF64:/opt/weblogic/bea/weblogic90/server/native/hpux11/PA_RISC:/opt/
weblogic/ bea/weblogic90/server/native/hpux11/PA_RISC/oci920_8:/usr/lib’
没有启动native io,导致系统性能低下(这里要注意HP-UX里IA64N下的是32位JDK,IA64W下的才是64位JDK),而且java io配置的值较小,产生如下报错
<Apr 28, 2010 6:15:03 PM GMT+08:00> <Warning> <Socket> <BEA-000402> <There are:
5 active sockets, but the maximum number of socket reader threads allowed by the
configuration is: 4. You may want to alter your configuration.>
在应用使用过程中从而出现
<Apr 28, 2010 6:14:10 PM GMT+08:00> <Error> <Console> <BEA-240003> <Console enco
untered the following error javax.servlet.jsp.JspException: Broken pipe (errno:3
2)
at com.bea.console.taglib.html.tree.TreeTag.print(TreeTag.java:231)
at com.bea.console.taglib.html.tree.TreeTag.doEndTag(TreeTag.java:192)
观察控制台的thread信息
Self-Tuning Thread Pool
Active Execute Threads Execute Thread Total Count Execute Thread Idle Count Queue Length Pending User Request Count Completed Request Count Hogging Thread Count Standby Thread Count Throughput Health
16 58 15 6048 0 144840 4 38 4.577865205875421 OK
排队的请求数多达6000个,导致了OutOfMemory,在JAVA堆还很空的情况下
c) 故障解决:
观察发现/opt/weblogic/bea/weblogic90/server/native/hpux11/IPF32下面和native io相关的libmuxer.so没有执行权限,chmod +x 后再次启动错误信息不再出现。