CentOS 上 WebLogic 连接超时的定位与解决
一 快速定位思路
- 明确超时发生的环节:是客户端→WebLogic(HTTP/HTTPS)、WebLogic→数据库(JDBC)、还是WebLogic 内部线程/会话。
- 查看关键日志:WebLogic 日志位于 DOMAIN_HOME/servers/server_name/logs,重点看 AdminServer.out、server_name.out、server_name.log,从异常栈与关键字(如 SocketTimeout、reserve connection、leak、stuck thread)判断根因。
- 做最小化连通性验证:在 WebLogic 所在 CentOS 上用 ping、telnet 目标IP 端口、curl/wget 测试到数据库或前端的网络可达性与端口开放情况。
- 检查系统资源与网络:确认 CPU、内存、磁盘 I/O 充足,排查 防火墙/安全组 策略是否阻断端口(如 7001/7002、80、443 或数据库端口)。
二 常见场景与对应处理
- 客户端到 WebLogic 的 HTTP 读超时
现象:日志出现 java.net.SocketTimeoutException: Read timed out,并伴随如 idle timeout: ‘30000’ ms、socket timeout: ‘5000’ ms 等信息。
处理:
- 优化慢查询/慢接口,缩短单次请求处理时间;
- 前端改为异步提交或分页/流式传输,避免长轮询;
- 如业务允许,适度调大 WebLogic 的 CompleteHTTPMessageTimeout/CompleteMessageTimeout(例如从默认 480s 提升到业务可接受的阈值);
- 排查网络质量(丢包、抖动、链路拥塞)与客户端异常中断。
- WebLogic 到数据库的 JDBC 连接超时
现象:获取连接慢或报无法获取连接、连接被回收等。
处理:
- 在连接池启用连接有效性测试:设置 Test Frequency=60 秒,并勾选 Test Reserved/Test Created/Test Released Connections,指定 Test Table Name(如 Oracle 用 DUAL);
- 设置 Inactive Connection Timeout=100 秒(按需),回收长期空闲的物理连接;
- 设置 Connection Reserve Timeout=30 秒(获取连接等待超时)、Connection Creation Retry Frequency=30 秒(数据库暂不可达时重试建连);
- 打开连接泄漏检测:启用 Enable Connection Leak Profiling/Connection Profiling,观察日志中 “A JDBC pool connection leak was detected” 并修复未关闭的 Connection/Statement/ResultSet;
- 监控 Waiting For Connection High Count,必要时增大连接池最大连接数。
- 会话与线程导致的“超时”
现象:页面频繁被登出或接口偶发超时。
处理:
- 统一会话超时配置:在 web.xml 使用 54(单位:分钟),在 weblogic.xml 使用 TimeoutSecs3600(单位:秒);两者同时设置时以 web.xml 为准,建议只保留一处;
- 若出现 Stuck Thread Max Time 告警(默认 600s),先定位长事务/慢 SQL/死循环,再考虑适度调大阈值,避免掩盖根因。
- 系统与网络层面的优化
处理:
- 在 CentOS 调整 TCP 连接超时、最大连接数、缓冲区大小 等网络参数;
- 使用高性能网卡/交换机与负载均衡/反向代理提升稳定性与吞吐;
- 持续监控与调优网络连接,及时发现瓶颈。
三 关键参数与推荐值示例
| 场景 |
参数 |
推荐值 |
说明 |
| HTTP 读超时 |
CompleteHTTPMessageTimeout / CompleteMessageTimeout |
例如:480s → 1200s |
仅在确认业务处理确需更长时间时调整,避免掩盖性能问题 |
| JDBC 有效性测试 |
Test Frequency |
60 s |
定期检测物理连接可用性 |
| JDBC 有效性测试 |
Test Reserved/Test Created/Test Released |
启用 |
提供/创建/归还前均做有效性测试 |
| JDBC 测试表 |
Test Table Name |
Oracle:DUAL |
必须配置,否则测试无效 |
| 空闲回收 |
Inactive Connection Timeout |
100 s |
回收长期空闲连接,避免数据库端回收后客户端仍持有 |
| 获取连接等待 |
Connection Reserve Timeout |
30 s |
获取连接超时阈值 |
| 建连重试 |
Connection Creation Retry Frequency |
30 s |
数据库暂不可达时重试间隔 |
| 泄漏检测 |
Enable Connection Leak Profiling / Connection Profiling |
启用 |
辅助定位未关闭连接 |
| 会话超时 |
web.xml: session-timeout |
54 分钟 |
单位:分钟 |
| 会话超时 |
weblogic.xml: TimeoutSecs |
3600 秒 |
单位:秒;与 web.xml 冲突时以 web.xml 为准 |
四 排查与验证步骤
- 网络与防火墙:在 CentOS 上执行 ping、telnet 目标IP 端口、curl/wget,确认到数据库/前端的端口开放与连通性;必要时调整 iptables/firewalld 或云安全组策略。
- 日志与监控:查看 DOMAIN_HOME/servers/ 下相关日志,关注 SocketTimeout、reserve connection、leak、stuck thread 等关键字;在控制台观察 JDBC 连接池 的 Waiting For Connection High Count 与泄漏告警。
- 参数热调与回归:优先调整 JDBC 测试/回收/重试 与 HTTP 消息超时,在不重启或滚动发布的前提下验证效果;随后再评估是否需要调整 会话/线程 与 系统网络参数。
- 回归验证:使用压测或真实业务场景复现,确认超时显著下降且资源使用(连接数、线程、CPU/内存)处于合理区间。