我有一个使用 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
任何有关如何诊断此问题的建议将不胜感激。