我正在尝试执行CORB作业来处理我的文档。但是在处理整个集合的一部分后,它会抛出以下异常。
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脚本中捕获此异常,即执行相同的操作?
答案 0 :(得分:1)
有很多可能的原因。例如,它可能是JVM垃圾收集,服务器上的问题,甚至是网络路径中的某些问题。盲目改变事物不太可能有所帮助:首先确定问题,然后纠正它。
大多数情况下,它是JVM和GC。 MarkLogic XCC实现了自己的keepalive机制,类似于HTTP 1.1 keepalive。如果垃圾收集花费太多时间,则可能导致超时和重置。尝试监视以查看JVM是否正在运行其内存分配并在错误发生之前频繁地进行垃圾收集。添加-verbosegc
对于检测此问题也很有用。如果您认为GC是问题所在,请尝试添加-Xincgc
。您可能还需要减少线程数,以减少内存压力。您还可以使用-Xmx
增加分配。但是不要盲目地这样做,我不会超过1-GiB。
绝对检查ErrorLog.txt
并检查一般服务器运行状况。它是否使用任何交换空间?是分页吗?操作系统日志中有什么可疑的东西?发生问题时CPU,内存,磁盘和网络I / O如何显示?
每隔一段时间,这种事情就会变成一个不喜欢长期连接并关闭它们的防火墙或路由器。如果可能的话,请安排它,以便您的客户端和服务器位于同一个子网上,除了相对愚蠢的集线器或交换机之外没有任何内容。如果任一主机上都有本地防火墙,请确保它不会干扰。
答案 1 :(得分:0)
同伴关联的可能原因&#39;有几个:
......可能会有更多。最常见的原因是(3),这是某人的应用程序协议错误。