1

我有一个使用 solrj 4 的多线程应用程序。最多有 25 个线程。每个线程使用 HttpSolrServer 创建一个连接,并运行一个查询。大多数时候这工作得很好。但偶尔我会遇到以下异常:

Jan 10, 2013 9:29:07 AM org.apache.http.impl.client.DefaultRequestDirector     tryConnect
INFO: I/O exception (java.net.NoRouteToHostException) caught when connecting    to the target host: Cannot assign requested address
Jan 10, 2013 9:29:07 AM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: Retrying connect
Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)

如果失败,我编写了一些代码来重试查询:

 while(!querySuccess && queryAttempts<m_MaxQueryAttempts ){
             try{
                 queryAttempts++;
                 rsp = m_Server.query( query );
                 querySuccess = true;
             }catch(SolrServerException e){
                 querySuccess = false;
             }
         }

一次或多次重试后,查询通常有效。但有时即使重试 100 次也会失败。无论哪种方式,我都想了解问题的原因是什么。为什么它有时会起作用?对 solr 的并发访问是否存在问题?除了这个过程,我只有另一个过程,它使用单个连接不断地写入索引。默认服务器设置如下 - 所以我不认为这是因为同时连接太多。

 INFO: Creating new http client, config:maxConnections=128&maxConnectionsPerHost=32&followRedirects=false 

任何有关如何诊断此问题的建议将不胜感激。

4

0 回答 0