我正在使用一个 Java 应用程序,它使用索尔杰将文档索引到 Solr 服务器。
在我的本地测试环境中,我在 Windows XP 机器上的 Tomcat 服务器上运行本地 Solr 实例。当我从不同的 Windows 机器运行 Java 应用程序时,索引成功完成,并且 Solr 日志文件看起来正常。
但是,在运行部署在 Linux 网络服务器上的相同 Java 应用程序并与另一个运行 Solr 的 Linux 网络服务器通信时,每次执行 solr 更新命令后我都会收到“读取超时”消息:
2011 年 7 月 14 日 凌晨 3:12:31 org.apache.solr.core.SolrCore 执行信息:[]
webapp=/solr path=/update params={wt=javabin&version=1} status=400 QTime=20020 2011 年 7 月 14 日,凌晨 3:12:51 org.apache.solr.update.processor.LogUpdateProcessor 完成 INFO:{} 0 20021 2011 年 7 月 14 日,凌晨 3:12:51 org.apache.solr.common.SolrException 日志 SEVERE:org.apache.solr.common.SolrException:java.net.SocketTimeoutException:读取超时 at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:72) at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:54) at...
原因:javax.xml.stream.XMLStreamException:java.net.SocketTimeoutException:读取超时
知道为什么会发生这种情况吗?我怀疑有些东西在启动后关闭了这些连接(例如 Web 过滤软件、防火墙……),但我工作场所的网络管理员说没有阻止任何流量。
我也很奇怪为什么这在 Windows 上有效,但在 Linux 上却不行。
答案1
几条线索:
- 您是否在以高速率索引数据?如果是,这可能会导致 solr 在将索引写入磁盘时锁定(解释为什么这在设备上不可见...)
- Linux 上的磁盘或文件系统速度很慢?如果是,再加上索引,情况就会变得相当糟糕...
- 您是否尝试在同一个 Linux 机器上运行这两个服务 (web 和 solr) 以查看问题是否消失?如果问题消失,则显然与网络有关,您可以切换到“最终”解决方案:
- 您是否尝试过使用嗅探网络流量
tcpdump
并打开跟踪Wireshark
,看看发生了什么?
希望这有帮助,祝你好运 !