CORB作业:处理ServerConnectionException:由对等重置连接

我正在尝试执行CORB作业来处理我的文档。 但是在处理整个集合的一部分之后,抛出了下面的exception。

com.marklogic.xcc.exceptions.ServerConnectionException: Connection reset by peer [Session: user=<username>, cb={default} [ContentSource: <username>, cb={none} [provider: address=<xyz.com>/<IP>, pool=0/64]]] [Client: XCC/7.0-2, Server: XDBC/7.0-3.1] at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:124) at com.marklogic.xcc.impl.SessionImpl.submitRequestInternal(SessionImpl.java:388) at com.marklogic.xcc.impl.SessionImpl.submitRequest(SessionImpl.java:371) at com.marklogic.developer.corb.Transform.call(Transform.java:68) at com.marklogic.developer.corb.Transform.call(Transform.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) 

我们尝试增加线程数和内存分配,但无济于事。

我的要求是双重的:

  1. 这可能是什么原因呢? 有没有办法解决这个问题?

  2. 如果没有,是否有办法在shell脚本中捕获这个exception,这是执行相同的?

有很多可能的原因。 例如,它可能是JVM垃圾回收,服务器上的问题,甚至是网络路径中的问题。 盲目地改变事情不可能有所帮助:首先找出问题,然后纠正它。

大多数情况下,它是JVM和GC。 MarkLogic XCC实现了自己的Keepalive机制,像HTTP 1.1 keepalive。 如果垃圾收集需要太多的时间,这可能会导致超时和重置。 尝试监视JVM是否似乎正在运行内存分配,并在错误发生之前频繁地触发垃圾回收。 添加-verbosegc也可能对检测这个有用。 如果您认为GC是问题,请尝试添加-Xincgc 。 您可能还想减少线程数,以减少内存压力。 你也可以用-Xmx增加分配。 但是不要盲目做,我不会过1-GiB。

绝对检查ErrorLog.txt ,并检查一般服务器的健康状况。 它使用任何交换空间? 它是分页吗? 任何可疑的操作系统日志? 发生问题时,CPU,内存,磁盘和网络I / O的外观如何?

偶尔,这种事情会变成一个不喜欢长期连接而关闭的防火墙或路由器。 如果可能的话,安排它,以便您的客户端和服务器在同一个子网上,除了相对笨的集线器或交换机之外没有任何东西。 如果在任一主机上都有本地防火墙,请确保它不会干扰。

“同行相连”的可能原因有几个:

  1. 对等应用程序故意重置连接。
  2. 对等应用程序在其套接字接收缓冲区中仍然存在未读数据的情况下关闭连接。
  3. 对等应用程序关闭了连接,并在之后继续发送数据。
  4. 中间防火墙通常由于超时而断开连接。

…可能还有更多。 最常见的原因是(3),这是某人的应用协议错误。