主要观点:描述了影响 Java HotSpot VM 1.5 上运行的 Weblogic 10.0 环境的 HashMap 高 CPU 问题(无限循环)的根本原因分析和解决方案。
关键信息:
- 环境规格:Java EE 服务器为 Oracle Weblogic Portal 10.0,中间件操作系统为 Solaris 10,Java VM 为 Java HotSpot VM 1.5,平台类型为门户应用。
- 监控和故障排除工具:JVM 线程转储(HotSpot 格式)、Solaris prstat(CPU 贡献者分析)。
- 问题概述:在 Solaris 物理服务器上的 Weblogic 门户 10 环境中观察到高 CPU 问题,用户报告门户应用程序严重减速。
- 事实收集和验证:确定客户端影响高,受影响平台近期无变化,近期流量增加,高 CPU 表现为突然上升且即使负载下降仍不下降,Oracle OSB 回收可解决问题但问题会在数小时或数天后返回。
- Solaris CPU 分析:使用 prstat 确认 CPU 利用率高达 100%,3 个 Java 线程使用近 100%的 CPU 利用率,重点关注线程 #494。
- 线程转储分析:在生成的线程转储文件中发现线程堆栈跟踪,线程卡在 Apache Axis TypeMappingImpl 类的 java.util.HashMap 中的无限循环中,其他两个高 CPU 线程也有相同情况。
- 根本原因:Apache Axis 1.4 中存在非线程安全的 HashMap,在并发线程条件下容易导致内部 HashMap 索引损坏和无限循环。
- 解决方案:应用 Apache 的补丁(同步非线程安全的 HashMap)解决问题,目前正在考虑将应用程序升级到新版本的 Apache Axis。
重要细节: - 通过 prstat 观察到多个 Java 线程的 CPU 利用率情况。
- 线程转储分析中详细展示了线程的堆栈跟踪。
- 提到了对于中间件软件和开源第三方 API 中使用线程安全数据结构的重要性及最佳实践。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。