2012-01-05 3 views
2

검색을 호스팅하는 프로덕션 웹 서버와 Solr 검색 서버를 호스팅하는 다른 시스템 (같은 방의 서브넷에 있으므로 네트워크 문제가 없음)이 있습니다. 모두 괜찮아요> 90 %,하지만 나는 일관되게 작은 숫자의 The operation has timed out 오류가 발생합니다.SolrNet을 사용하는 Solr 서버에 대한 간헐적 인 연결 시간 초과

나는 (!) 30초에 init을 SolrNet에

SolrNet.Startup.Init<SolrDataObject>(
    new SolrNet.Impl.SolrConnection(
     System.Configuration.ConfigurationManager.AppSettings["URL"] 
    ) {Timeout = 30000} 
); 

을 제한 시간을 증가했습니다 ...하지만 일어난 모든 것을 내가 대신 내가 전에보고 있었다 Unable to connect to the remote server의이 메시지를 받기 시작입니다 . 타임 아웃 오류의 양과 아무런 차이가없는 것 같습니다.

나는 어떤 로그하고 대부분의 시간을 작동하기 때문에 명확하게 내 구성이 올바른지 (나는! 봤는데 날 믿어)에서 아무것도를 볼 수 있습니다. 누구든지이 문제에 대해 더 많은 정보를 찾을 수있는 방법에 대한 아이디어가 있습니까?

편집 :

는 지금 '많은'(I 10 개의 연결을 참조) 2의 연결 HttpRequest에의 수를 증가 -하지만이 문제에 아무런 식별 할 수있는 영향을 미치지 않았다.

방화벽은 두 시스템간에 ANY 연결을 허용하도록 설정됩니다.

또한 서버 호스트와 하드웨어를 검사 했으므로 연결에 문제가없는 것으로 나타났습니다.

편집 2 :

우리는 여전히이 문제를보고있다.

이제 우리는 타임 아웃을 로깅하고 있으며 대부분 30 초가 넘었습니다. 이것은 SolrNet 레이어의 시간 초과입니다. 일부는 20 초가되지만 Tomcat 기본 시간 초과 기간인데 이는 머신 간의 실제 연결에 있음을 나타냅니다.

여기에서 어디로 갈지는 확실치 않습니다. VLAN에 있으며 VLAN 주소를 사용하고 있습니다. 핑의 응답 시간은 항상 < 1ms입니다.

+1

커밋/전략 최적화 란 무엇입니까? –

+0

희망 사항 : 15 분에 한 번 dataimporthandler 델타를 수행합니다. 하룻밤 전체 가져 오기. 그러나 나는 어떤 종류의 최적화도하지 않습니다. 나는 가서 지금 읽을거야. 너는 무엇을 제안 하겠는가? –

+0

흠, 읽었을뿐 예약 업데이트를 추가 한 적이 있습니까? 전체 가져 오기 후 매일 밤 optimize = true가됩니다. 그러나 TBH는 제한 시간이 30 초를 초과하여 최적화를 수행 할 것이라고는 생각하지 않습니다. 1 초도 안됩니다. –

답변

2

자세한 내용은없이, 나는 몇 가지 이유를 추측 할 수 있습니다

+0

엄청난 양의 FQ와 많은 Facet.Queries이기 때문에 예제의 쿼리 스트링을 복사하지 않았습니다. QTime은 100-200 초 사이에 내려갔습니다. 행 수가 20 개가되어 많은 문서를 반환하지 않습니다. 링크를 가져 주셔서 감사합니다. 그들을 확인합니다. –

+0

ServicePoint.ConnectionLimit을 변경하는 데 관심이 있습니다. 그러나 SolrNet을 사용하여이 작업을 수행하는 가장 좋은 방법은 확실하지 않습니까? 그냥 위로 올려 놓으십시오 : System.Net.ServicePointManager.DefaultConnectionLimit = 200; SolrNet.Startup.Init (새로운 SolrNet.Impl.SolrConnection (System.Configuration.ConfigurationManager.AppSettings [ "URL"]) {Timeout = 30000}); ? –

+0

@IanGrainger 예, web.config에서 설정할 수도 있습니다. –

0

.net에서 설정하십시오.

ServicePointManager.Expect100Continue = false;

또는이

ServicePointManager.SetTcpKeepAlive(true, 200000, 200000); -이 살아 연결을 유지하기 위해 서버에 요청을 보냅니다.

+0

꽤 광범위한 독서를 한 후에 - 이것이 Java가 실행되는 방식 일 수 있다고 생각합니다. 나는 메모리 또는 유사한 것을 재활용하면서 요청을 처리하는 것을 멈춘다 고 생각한다. 다음 번에 내가 서버에 변경을 할 때이를 조사 할 것이다. - 제안에 감사한다. –