我有一个使用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
对于如何诊断这一点的任何建议都将非常感激。