Weblogic 10.3.0 在 AIX6.1、JDK1.6 下挂起解决方法

在AIX6.1环境下安装WebLogic 10.3.0并配置hacmp集群后遇到挂起问题。表现为WebLogic启动后10到30分钟内系统挂起,无法访问应用和管理控制台。通过分析日志和线程信息,确定为已知的WebLogic与IBM JVM的兼容性问题,并给出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

上周在AIX6.1下安装weblogic10.3.0,并配置了hacmp集群环境,但是接下来的几天遇到了挂起问题,为此还加班了一天。

现象描述:

Weblogic启动后,10到30分钟就会hang住,应用和管理控制台都无法访问。强制kill -9 pid后端口无法释放,使用rmsock 命令查看端口显示Wait for exiting processes to be cleaned up before removing the socket。

分析及处理过程

1. 用ps –ef | grep java找到weblogic进程,每隔三分种执行kill -3 pid,在domain目录下生成javacore文件

2. 分析weblogic日志,发现如下内容

<Aug 21, 2009 4:33:37 AM CDT> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: ‘1′ for queue: ‘weblogic.kernel.Default (self-tuning)’ has been busy for “620″ seconds working on the request

“weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@20de20de”, which is more than the configured time (StuckThreadMaxTime) of “600″ seconds. Stack trace:

java.net.SocketOutputStream.socketWrite0(Native Method)

java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:103)

……

<Aug 21, 2009 4:34:37 AM CDT> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: ‘1′ for queue: ‘weblogic.kernel.Default (self-tuning)’ has been busy for “680″ seconds working on the request

“weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@20de20de”, which is more than the configured time (StuckThreadMaxTime) of “600″ seconds. Stack trace:

java.net.SocketOutputStream.socketWrite0(Native Method)

java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:103)

……

3. 用IBM Thread and Monitor Dump Analyzer for java分析刚才生成的thread dump,找到如下两个线程信息:

3XMTHREADINFO “[ACTIVE] ExecuteThread: ‘5′ for queue: ‘weblogic.kernel.Default (self-tuning)’” TID:0×39CBED00, j9thread_t:0×3751C83C, state:R, prio=5

3XMTHREADINFO1 (native thread ID:0xCE1DB, native priority:0×5, native policy:UNKNOWN)

4XESTACKTRACE at java/net/PlainSocketImpl.socketClose0(Native Method)

4XESTACKTRACE at java/net/PlainSocketImpl.socketPreClose(PlainSocketImpl.java:706)

4XESTACKTRACE at java/net/PlainSocketImpl.close(PlainSocketImpl.java:540)

4XESTACKTRACE at java/net/SocksSocketImpl.close(SocksSocketImpl.java:1041)

4XESTACKTRACE at java/net/Socket.close(Socket.java:1343)

4XESTACKTRACE at weblogic/socket/SocketMuxer.closeSocket(SocketMuxer.java:475)

4XESTACKTRACE at weblogic/socket/SocketMuxer.cancelIo(SocketMuxer.java:813)

4XESTACKTRACE at weblogic/socket/SocketMuxer$TimerListenerImpl.timerExpired(SocketMuxer.java:1021(Compiled Code))

4XESTACKTRACE at weblogic/timers/internal/TimerImpl.run(TimerImpl.java:273(Compiled Code))

4XESTACKTRACE at weblogic/work/SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516(Compiled Code))

4XESTACKTRACE at weblogic/work/ExecuteThread.execute(ExecuteThread.java:201(Compiled Code))

4XESTACKTRACE at weblogic/work/ExecuteThread.run(ExecuteThread.java:173)

3XMTHREADINFO “ExecuteThread: ‘7′ for queue: ‘weblogic.socket.Muxer’” TID:0×35381D00, j9thread_t:0×35385864, state:R, prio=5

3XMTHREADINFO1 (native thread ID:0xB916F, native priority:0×5, native policy:UNKNOWN)

4XESTACKTRACE at weblogic/socket/PosixSocketMuxer.poll(Native Method)

4XESTACKTRACE at weblogic/socket/PosixSocketMuxer.processSockets(PosixSocketMuxer.java:102(Compiled Code))

4XESTACKTRACE at weblogic/socket/SocketReaderRequest.run(SocketReaderRequest.java:29)

4XESTACKTRACE at weblogic/socket/SocketReaderRequest.execute(SocketReaderRequest.java:42)

4XESTACKTRACE at weblogic/kernel/ExecuteThread.execute(ExecuteThread.java:145)

4XESTACKTRACE at weblogic/kernel/ExecuteThread.run(ExecuteThread.java:117)

4. 执行线程只有这两个是running状态,一个做CLOSE(),一个做POLL()。别的都是blocked或者wait状态。

5. 经过metalink查询以及和800支持人员确认,这是Weblogic在AIX的JVM上由来已久的bug,从8.1.4就开始在不同版本间出现。原因是IBM的JVM底层socket实现和weblogic配合问题,需要打patch CR370915_1030GA.jar解决。

操作过程

1.在weblogic的启动脚本中,找到CLASSPATH一行

2.在CLASSPATH变量的第一位添加补丁jar包
Eg: CLASSPATH=”${CLASSPATH}${CLASSPATHSEP}${MEDREC_WEBLOGIC_CLASSPATH}”
—>
CLASSPATH=/路径/CR370915_1030GA.jar:”${CLASSPATH}${CLASSPATHSEP}${MEDREC_WEBLOGIC_CLASSPATH}”

3.以上操作仅对这个domain起作用,为了对所有domain起作用,可以添加到common/bin/的目录中的commEnv.sh文件中WEBLOGIC_CLASSPATH=最前面

总结

这个bug在weblgoic和IBM的JVM相组合的平台上出现较为普遍,如果出现相关日志信息,基本可以断定需要打CR370915补丁。

更新:我这里的补丁仅仅 for weblogic 10.3.0.0,其它版本的可以自行用Smart Update下载

Patches for WLS 8.x can be found in My Oracle Support. Open the Patches & Updates tab. Search for patch ID 8173442 for the patches for WLS 8.1mp3, 8.1mp4, and 8.1mp5. Search for patch ID 8179792 for the patch for WLS 8.1mp6.

Patches for WLS 9.x and higher can be downloaded from Smart Update using these patch IDs and passcodes:

——————————————
PATCH REPOSITORY INFORMATION
——————————————
WLS Version | Patch ID |  Passcode
————+———-+—————-
9.2      |  T4DV    |  7C7PYV9B
9.2mp1   |  HZHQ    |  PTUYCCSI
9.2mp2   |  WJD2    |  GU1CW2AB
9.2mp3   |  GNLT    |  8J9L6Q4Y
10.0     |  PMAJ    |  9UQ69LLT
10.0mp1  |  ITVL    |  K8RBHQQ2
10.3     |  9YT5    |  I1DB5QSV

如果生产机无法联网,可以

1. Using SmartUpdate in offline mode
===========================
You can apply the patch using SmartUpdate with the following steps:
  1. Download the patch using SmartUpdate on another machine with Internet access.
  2. Copy the files (for example E5W8.jar and WGQJ.jar) and patch-catalog.xml from your machine with Internet access to the offline machine. For example, say you have a test environment running on a Windows box. Your production environment is running on UNIX. You might copy the jar files from %BEA_HOME%/utils/bsu/cache-dir to $BEA_HOME/utils/bsu/cache-dir.
  3. When a machine connects to Smart Update, the catalog of patches is always updated automatically. Thus, when a patch is being copied to an offline machine, the patch-catalog.xml file must also be copied over.
  4. Run SmartUpdate in offline mode and apply patches and patch sets. This can be done using the SmartUpdate command-line interface (see http://download.oracle.com/docs/cd/E14759_01/doc.32/e14143/commands.htm#i1074489).
  5. This is the syntax for the command to install a patch:.
/bsu.sh -prod_dir=<weblogic_home> -patchlist=<patchID> -verbose -install
For example,
./bsu.sh -prod_dir=/opt/bea/weblogic92 -patchlist=E5W8 -verbose -install
./bsu.sh -prod_dir=/opt/bea/weblogic92 -patchlist=WGQJ -verbose -install
2. Applying the patch to the classpath manually
============================
  1. You can apply the patch to the offline system manually by extracting the actual patch and adding it to the classpath on the offline system:Extract the actual patch jar file. If you downloaded the patch using SmartUpdate, it will be in the form <patch_id>.jar (for example: E5W8.jar). Inside this jar file is the actual patch jar file, which will be of the form CR326566_92mp3.jar. Extract the latter file for the following steps.
  2. Add the extracted jar file as the first element of the classpath of the Admin server as well as the managed servers in the domain.
  3. If you are starting servers using the WebLogic startup script, update the classpath in the startup script like this:set CLASSPATH=<PATCH_DIR>/jars/CR326566_92mp3.jar;%CLASSPATH% (Windows)CLASSPATH=<PATCH_DIR>/jars/CR326566_92mp3.jar:$CLASSPATH (UNIX)where PATCH_DIR is the directory on your local machine where you extracted/saved the patch file.
  4. Similarly, if you are starting servers using Node Manager, add the patch jar to the beginning of the Class Path argument in the Server Start tab for the server(s).

我一般用第二种,对于单个补丁快捷方便,SmartUpdate可以单独安装,但是会让你选择应用到哪个BEA的主目录,不同的版本和平台能下的补丁不一样。在Windows平台上当然没有AIX的BEA版本,不过只要自己建个目录,然后拷贝一份register.xml进去就可以了。

 

 

备注:

本文转载自:http://www.hashei.me/2009/08/cr370915_in_weblogic10-3_and_jdk1-6.html

<think>嗯,用户想在WebLogicJDK 1.6环境下启用TLS 1.2,并确保与客户端正常握手。这听起来有点挑战,因为JDK 1.6本身可能不支持TLS 1.2,需要看看有没有办法绕过这个限制。首先,我得回忆一下WebLogic的版本对TLS的支持情况。WebLogic 10.3.6JDK 1.6上运行,但默认可能不支持TLS 1.2,可能需要额外的配置。 然后,JDK 1.6的问题。我记得Oracle在JDK 1.6的后期版本中可能添加了TLS 1.2的支持,比如1.6.0_115之后的版本,但需要确认用户是否安装了这些更新。如果用户用的是较旧的JDK 1.6,可能需要升级到最新的update,或者安装JCE Unlimited Strength策略文件来启用更强的加密算法。 接下来,配置WebLogic的启动参数,添加JVM参数来启用TLS 1.2。比如,-Dweblogic.security.SSL.protocolVersion和相关的加密套件设置。同时,可能需要修改WebLogic的安全配置,禁用旧协议,只启用TLS 1.2。 双向认证的问题,用户可能也需要处理证书的配置,比如密钥库和信任库的设置。根据引用中的内容,可能需要导入证书到weblogic.jks,并配置客户机证书行为。如果客户端也需要认证,可能需要双向SSL的配置,但用户的问题主要是启用TLS 1.2,所以可能需要先确保服务器端正确配置,再处理客户端兼容性。 另外,客户端的兼容性测试很重要。比如,用现代浏览器或工具测试连接,查看支持的协议和 cipher suites。可能需要调整WebLogic的加密套件列表,以匹配客户端支持的TLS 1.2套件。 最后,如果JDK 1.6实在无法支持TLS 1.2,可能需要考虑升级到更高版本的JDK,但用户可能因为某些原因必须使用JDK 1.6,所以得尽量在现有环境下解决。可能需要结合WebLogic的配置和JDK的补丁来实现。</think>### 分步解答:在 WebLogicJDK 1.6 环境下启用 TLS 1.2 #### 1. **确认 JDK 1.6 的兼容性** - **JDK 1.6 更新版本**:需确保使用 JDK 1.6 Update 115 或更高版本(需 Oracle 商业支持),这些版本通过扩展支持 TLS 1.2[^1]。 - **验证支持性**:通过以下命令检查支持的协议: ```bash java -jar SSLServerSocket.jar ``` 若输出包含 `TLSv1.2`,则支持。 #### 2. **配置 WebLogic 的 JVM 参数** - 在 `startWebLogic.sh`(或 `.cmd`)中添加以下参数: ```bash -Dweblogic.security.SSL.protocolVersion=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2 -Dhttps.protocols=TLSv1.2 ``` - **强制加密算法**(示例): ```bash -Dweblogic.security.SSL.ciphersuites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA ``` #### 3. **修改 WebLogic 控制台配置** - **禁用旧协议**:在管理控制台的 `SSL` 配置页面,取消勾选 `SSLv3` 和 `TLSv1`,仅保留 `TLSv1.2`[^1]。 - **证书配置**:确保密钥库(如 `weblogic.jks`)已正确导入证书: ```bash keytool -import -trustcacerts -keystore weblogic.jks -alias ca -file weblogic.cer ``` #### 4. **处理 JDK 1.6 的加密限制** - **安装 JCE Unlimited Strength Policy**:从 Oracle 下载对应版本的策略文件,替换 `jre/lib/security` 中的 `local_policy.jar` 和 `US_export_policy.jar`。 #### 5. **客户端兼容性验证** - **测试工具**:使用 `openssl` 或浏览器开发者工具检查握手结果: ```bash openssl s_client -connect <host:port> -tls1_2 ``` - **客户端证书处理**:若需双向认证,需配置客户端信任库并导入服务端证书[^3]。 --- ### 常见问题规避 1. **协议协商失败**:确保客户端和服务端支持的协议/加密套件有交集。 2. **证书链不完整**:通过 `keytool -list -v` 检查密钥库中的证书链。 3. **性能影响**:TLS 1.2 的完全正向保密(PFS)算法可能增加 CPU 负载,建议优化加密套件顺序。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值