我正在尝试执行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)
我们尝试增加线程数和内存分配,但无济于事。
我的要求是双重的:
这可能是什么原因呢? 有没有办法解决这个问题?
如果没有,是否有办法在shell脚本中捕获这个exception,这是执行相同的?
有很多可能的原因。 例如,它可能是JVM垃圾回收,服务器上的问题,甚至是网络路径中的问题。 盲目地改变事情不可能有所帮助:首先找出问题,然后纠正它。
大多数情况下,它是JVM和GC。 MarkLogic XCC实现了自己的Keepalive机制,像HTTP 1.1 keepalive。 如果垃圾收集需要太多的时间,这可能会导致超时和重置。 尝试监视JVM是否似乎正在运行内存分配,并在错误发生之前频繁地触发垃圾回收。 添加-verbosegc
也可能对检测这个有用。 如果您认为GC是问题,请尝试添加-Xincgc
。 您可能还想减少线程数,以减少内存压力。 你也可以用-Xmx
增加分配。 但是不要盲目做,我不会过1-GiB。
绝对检查ErrorLog.txt
,并检查一般服务器的健康状况。 它使用任何交换空间? 它是分页吗? 任何可疑的操作系统日志? 发生问题时,CPU,内存,磁盘和网络I / O的外观如何?
偶尔,这种事情会变成一个不喜欢长期连接而关闭的防火墙或路由器。 如果可能的话,安排它,以便您的客户端和服务器在同一个子网上,除了相对笨的集线器或交换机之外没有任何东西。 如果在任一主机上都有本地防火墙,请确保它不会干扰。
“同行相连”的可能原因有几个:
…可能还有更多。 最常见的原因是(3),这是某人的应用协议错误。