如何修复WebSphere 6.1调用外部WebService时的probeid=337异步IO异常
解决WebSphere 6.1调用外部WebService间歇性Async IO失败问题
我之前处理过好几起WAS6.1上类似的WebService调用间歇性IO错误,结合你已经排除WAS7专属端口问题的排查结果,这个RC:107 Transport endpoint is not connected错误本质是TCP连接被远端或网络设备提前关闭,但WAS的异步IO通道还在尝试读取数据导致的。下面是几个针对性的解决方案:
一、调整WebService客户端连接池配置
WAS的WebService客户端默认复用连接池中的连接,如果远端服务主动关闭了连接但池里的连接还没被回收,就会触发这个异常。你可以这么调整:
- 登录WAS管理控制台,依次进入 应用程序 > 企业应用程序 > [你的目标应用] > Web服务客户端属性
- 找到对应外部WebService的客户端配置,把最大空闲时间设得比远端服务的连接超时时间短(比如30秒),确保无效连接会被及时回收
- 同步设置连接超时和读取超时,和外部WebService的配置对齐,避免长时间等待无效连接
二、禁用异步IO(AIO)支持
WAS6.1的AIO实现存在一些兼容性问题,尤其是和老版本服务端或某些网络设备交互时。尝试关闭AIO:
- 进入 服务器 > 服务器类型 > WebSphere应用服务器 > [你的服务器] > 端口
- 找到HTTP传输端口(一般是WC_defaulthost),进入后取消勾选使用异步IO选项
- 重启服务器生效
三、优化TCP通道超时设置
TCP层面的超时配置会直接影响连接有效性:
- 导航到 服务器 > 服务器类型 > WebSphere应用服务器 > [你的服务器] > TCP传输通道
- 找到对应通道,把保持活动时间设为120秒左右,让WAS主动检测空闲连接是否有效
- 同时调整连接超时和读取超时,避免连接长时间处于半开状态
四、启用WebService客户端连接验证
让客户端在使用连接前先验证有效性:
- 编辑应用里的WebService客户端配置文件(比如
ibm-webservicesclient-bnd.xmi或者WSDL绑定文件) - 添加参数
com.ibm.ws.websvcs.transport.http.connectionValidationEnabled并设为true - 或者在代码层面做一层封装,调用WebService前先检查连接状态,无效则重新创建连接
五、排查网络中间设备
如果以上配置都没用,就得查网络层面:
- 检查防火墙、负载均衡器的空闲连接超时设置,要是这个时间比WAS连接池的空闲时间短,就会导致连接被提前关闭
- 确认外部WebService服务端的连接复用限制,比如最大连接数、空闲连接回收策略
验证方式
调整后可以这么验证效果:
- 给应用加详细日志,记录每次WebService调用的连接状态和错误信息
- 用压力测试工具模拟并发请求,观察是否还会出现间歇性异常
- 监控TCP连接状态,看是否有大量TIME_WAIT或CLOSE_WAIT状态的连接
内容的提问来源于stack exchange,提问作者Sudersan
相关产品推荐
相关产品推荐

