2014-03-04 2 views
3

SocketTimeoutException (아래 스택 추적 참조)으로 인해 발생했습니다. 즉, 클라이언트가 제한 시간 (30 초) 내에 응답을받지 못했습니다. 이제 나는 그것을 고치는 방법을 궁금해.Mongo에서 소켓 시간 초과 예외

간단한 해결책은 시간 초과를 늘리는 것이지만 근본 원인을 먼저 이해하고 싶습니다. 너는 무엇을 제안 하겠는가?

 
caused by java.net.SocketTimeoutException: Read timed out 
       java.net.SocketInputStream.socketRead0 (Native Method) 
         java.net.SocketInputStream.read (SocketInputStream.java:152) 
         java.net.SocketInputStream.read (SocketInputStream.java:122) 
         java.io.BufferedInputStream.read1 (BufferedInputStream.java:273) 
         java.io.BufferedInputStream.read (BufferedInputStream.java:334) 
       com.mongodb.Response$MyInputStream.read (Response.java:168) 
       org.bson.BasicBSONDecoder$BSONInput.fill (BasicBSONDecoder.java:386) 
    org.bson.BasicBSONDecoder$BSONInput.readUTF8String (BasicBSONDecoder.java:460) 
       org.bson.BasicBSONDecoder.decodeElement (BasicBSONDecoder.java:155) 
         org.bson.BasicBSONDecoder._decode (BasicBSONDecoder.java:79) 
         org.bson.BasicBSONDecoder.decode (BasicBSONDecoder.java:57) 
        com.mongodb.DefaultDBDecoder.decode (DefaultDBDecoder.java:61) 
         com.mongodb.Response. (Response.java:83) 
            com.mongodb.DBPort.go (DBPort.java:142) 
           com.mongodb.DBPort.call (DBPort.java:92) 
        com.mongodb.DBTCPConnector.innerCall (DBTCPConnector.java:244) 
         com.mongodb.DBTCPConnector.call (DBTCPConnector.java:216) 
      com.mongodb.DBApiLayer$MyCollection.__find (DBApiLayer.java:288) 
      com.mongodb.DBApiLayer$MyCollection.__find (DBApiLayer.java:273) 
         com.mongodb.DBCollection.findOne (DBCollection.java:728) 
         com.mongodb.DBCollection.findOne (DBCollection.java:708) 

답변

6

이러한 제한 시간은 비활성 기간 후에 발생 했습니까? 너무 오래 유휴 상태가 된 후에 연결 풀이 오래되었을 가능성이 있습니다.

그래서, 거기에 이것에 대해가는 두 가지 방법 인 경우 :

  1. 캐치 소켓 시간 초과 예외하고 즉시 요청이 새로운 연결 풀에 액세스 할 수 있어야합니다. 연결 개체의 자동 다시 연결 옵션이 기본값 인 true 인 경우입니다.

  2. 동일한 연결 풀을 사용하여 주기적으로 mongod 서버에 ping을 보내려면 사용자 지정 연결 유지를 사용하므로 풀 신선한 상태로 유지됩니다.

옵션 1은 쉽게 구현할 수 있지만 기본 소켓 제한 시간은 오히려 과도한 30 대 중심이다. 필요에 따라이 설정을 변경할 수 있습니다.

옵션 2는 스레딩과 관련된 약간의 해킹입니다.