Corb任务处理120个URI失败,100个URI处理成功(附错误日志)
问题描述
使用CORB从多个URI提取数据并输出为CSV时,处理100个URI任务成功,但处理120个URI时触发连接错误,错误日志如下:
INFO: 触发线程池优雅关闭,等待队列中剩余任务完成。
2025年5月20日 下午2:12:41 com.marklogic.developer.corb.Monitor monitorResults
INFO: 监控1个任务
2025年5月20日 下午2:12:47 com.marklogic.developer.corb.DefaultContentSourcePool error
WARNING: ContentSource用户=, cb={none} [provider: address=myins-ml-tst-edh-a-elb-us-east-2-web.tstaws.myinsurance.com/10..131.:8011, pool=0/64]的连接错误计数为1,最大限制为3
2025年5月20日 下午2:12:47 com.marklogic.developer.corb.DefaultContentSourcePool$SessionInvocationHandler invoke
WARNING: 提交请求因ServerConnectionException失败1次,最大限制为3,正在重试..
2025年5月20日 下午2:12:47 com.marklogic.developer.corb.DefaultContentSourcePool get
WARNING: ContentSource用户=, cb={none} [provider: address=myins-ml-tst-edh-a-elb-us-east-2-web.tstaws.my.com/10...**:8011, pool=0/64]连接失败,等待60秒后进行第2次重试
原因分析
日志显示核心问题是CORB连接池无法获取可用连接,触发重试机制。可能的诱因包括:
- 并发线程数/连接池配置不足以支撑120个URI的批量处理,导致连接耗尽
- 负载均衡器(ELB)或MarkLogic服务器在高并发场景下临时限制连接
- 网络波动导致连接中断
解决建议
调整CORB连接池与超时参数
- 增大
MAX-CONNECTIONS值(当前日志显示池大小为64),避免连接池耗尽 - 调整
THREAD-COUNT参数,匹配服务器可承载的并发量(不要超过MarkLogic应用服务器的max-connections设置) - 延长
CONNECT-TIMEOUT和READ-TIMEOUT参数值,减少因超时导致的连接失败
优化任务批量处理策略
- 将120个URI拆分为多个小批次执行,降低单批次并发压力
- 启用
BATCH-SIZE参数,控制每次批量处理的URI数量,避免一次性发起过多请求
检查服务器端配置
- 确认MarkLogic应用服务器的
max-connections设置,确保能容纳CORB的并发连接需求 - 检查负载均衡器(ELB)的连接超时配置,避免提前断开长连接
调整重试机制
- 适当提高
MAX-RETRIES参数值,增加重试次数 - 优化
RETRY-WAIT参数,调整重试间隔时间,避免短时间内重复发起请求
内容的提问来源于stack exchange,提问作者ravindra reddy

