solrj 4 を使用するマルチスレッド アプリケーションがあります。最大 25 のスレッドがあります。各スレッドは、HttpSolrServer を使用して接続を作成し、1 つのクエリを実行します。ほとんどの場合、これで問題なく動作します。しかし、時折、次の例外が発生します。
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;
}
}
1 回以上再試行した後、通常、クエリは機能します。ただし、100回リトライしても失敗する場合があります。いずれにせよ、問題の原因が何であるかを理解したいと思います。時々機能するのはなぜですか?solrへの同時アクセスの問題ですか?このプロセスとは別に、単一の接続を使用して継続的にインデックスに書き込むプロセスが 1 つだけあります。デフォルトのサーバー設定は次のとおりです。同時接続が多すぎるためではないと思います。
INFO: Creating new http client, config:maxConnections=128&maxConnectionsPerHost=32&followRedirects=false
これを診断する方法についての提案は大歓迎です。