【问题标题】:Solr and Jetty deployment issueSolr 和 Jetty 部署问题
【发布时间】:2012-12-27 15:08:49
【问题描述】:

我无法让 solr + jetty 工作。我正在关注所有 来自 - http://wiki.apache.org/solr/SolrJetty 的信件说明。它工作得很好。但是当我多次重新启动码头时,在 3/4 这样的重新启动后它开始挂起。管理页面无法加载,我的应用无法获得与 solr 的连接。我还创建了一个工作文件夹 - /opt/solr/work。我还将tmpdir 设置为/etc/default/jetty 中的新路径。我可以确认 tmpdir 设置为来自管理仪表板的新路径,在 args 下。因此,操作系统清除 tmp 文件基本上不是问题。

我可能缺少什么?我应该看看我的代码,看看我是否 没有正确提交?

我的配置 - 示例中的 Solr 4.0.0 和码头。带有 Open JDK 7 的 Ubuntu 12.04。

编辑:

我在 Ubuntu 12.04 机器上运行 Jetty 8,与 Solr 示例捆绑在一起。当我使用 start.jar 并且服务器无法正常启动时,关闭码头会引发 ThreadPoolException - 无法停止线程。

这是堆栈跟踪的转储:

2012-12-27 23:00:15.084:WARN:oejut.QueuedThreadPool:1 threads could not be stopped
2012-12-27 23:00:15.084:INFO:oejut.QueuedThreadPool:Couldn't stop Thread[qtp766488133-16,5,main]
2012-12-27 23:00:15.085:INFO:oejut.QueuedThreadPool: at sun.misc.Unsafe.park(Native Method)
2012-12-27 23:00:15.085:INFO:oejut.QueuedThreadPool: at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
2012-12-27 23:00:15.085:INFO:oejut.QueuedThreadPool: at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2081)
2012-12-27 23:00:15.085:INFO:oejut.QueuedThreadPool: at java.util.concurrent.ThreadPoolExecutor.awaitTermination(ThreadPoolExecutor.java:1425)
2012-12-27 23:00:15.086:INFO:oejut.QueuedThreadPool: at java.util.concurrent.Executors$DelegatedExecutorService.awaitTermination(Executors.java:636)
2012-12-27 23:00:15.086:INFO:oejut.QueuedThreadPool: at org.apache.solr.core.SolrCore.close(SolrCore.java:835)
2012-12-27 23:00:15.086:INFO:oejut.QueuedThreadPool: at org.apache.solr.handler.admin.CoreAdminHandler.getCoreStatus(CoreAdminHandler.java:865)

【问题讨论】:

  • 你能从那个 ThreadPoolException 中编辑和添加更多内容吗?
  • 添加了堆栈跟踪。如果您需要更多信息,请告诉我。
  • 好的,认为异常是一个红鲱鱼,可能是一个请求被 solr 内部的某些东西阻塞,并且在关闭时没有被完全清理。
  • 所以这绝对是一个 solr 方面的问题,而不是像 tmpdir 或工作目录设置这样的配置问题?

标签: solr jetty


【解决方案1】:

由于异常没有指出任何有趣的东西,我建议当它挂起时,您现在对整个服务器进行线程转储并分析阻止正确启动的原因。这些可能需要一些试验和错误才能弄清楚什么是什么,但应该让你知道是什么阻碍了事情。请注意,线程转储中以 qtp 开头的线程很少出现问题,它们用于处理请求,因此尽管其中可能有很多线程,但这并不表示它们是问题。常见问题是诸如在池资源上“等待”的数据库池之类的事情。

【讨论】:

  • 我的应用程序中没有使用任何数据库,它只是用于存储的 solr。此外,由于问题是在启动时出现的,我不确定这是否与请求被阻止有关。您知道关闭码头是否有任何已知问题?可能是我没有干净地停止它,因此重新开始时会出现问题。我可以根据需要加载码头,最多 50 多个请求/秒,没有问题。但是当我需要停止服务器并重新启动它时,问题就来了。
  • 线程转储应该解决这个问题。我当然不是说这不是配置问题,只是线程转储会突出显示正在发生的事情。我提到的数据库连接池只是一个例子。
  • pastebin.com/GPnAzF1q 这是线程转储。我在分析它方面不是很有经验,但仍在尝试。
  • 可能需要进行一系列线程转储以查看特定线程是否正在旋转,但我会试一试并说也许 SolrCore.getSearcher(SolrCore.java:1336) 正在阻止更多完成启动?实际的码头线程似乎很好。
【解决方案2】:

看来问题出在solrconfig.xml

如果我从solrconfig 中删除/browse 请求处理程序,问题就会消失。所以不是 solr 或码头问题,但很可能与它的配置有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2011-10-12
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多