찾다

 >  Q&A  >  본문

java - MongoSocketReadTimeoutException: 메시지 수신 중 시간 초과

1. 최근 mongodb를 운영하기 위해 spring-boot와 spring-data-mongo를 사용하고 있습니다

2. 매일 아침 서버 로그를 확인해보니 같은 오류가 발생하고 있는데, 다음날 누군가가 서버에 접속하면 오류가 발생할 것으로 추정됩니다.

3. 오류 로그는 다음과 같습니다.

으아악

4. 몇 가지 해결 방법을 시도하고 mongodb를 연결하는 코드를 다음과 같이 변경했습니다.

으아악

또한 서버(Ubuntu)의 ipv4 연결 유지 시간을 120초로 변경했습니다.

하지만 여전히 오류가 있습니다. 모두가 조언을 해주셨으면 좋겠습니다. 감사합니다!

为情所困为情所困2761일 전3846

모든 응답(2)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-05-31 10:37:10

    MongoDB가 Java에서 유지 관리하는 연결을 시작했을 가능성이 높습니다(상태가 CLOSE_WAIT로 변경되어 데이터를 보낼 수만 있고 더 이상 받을 수 없음).

    두 곳에서 솔루션을 생각할 수 있습니다.
    1. 연결 풀을 구성하거나(매우 복잡해 보임) 연결 풀을 사용하지 마세요. 즉, socketKeepAlive设成false;

    2. 문제는 모두 아침에 나타나기 때문에 MongoDB가 이른 아침에 연결을 재설정하는 전략이 있는지 확인할 수 있습니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-05-31 10:37:10

    1. 쿼리 시간이 너무 길 수도 있습니다. 10초를 초과하는 명령문과 같이 쿼리 시간이 비교적 긴 명령문을 찾아 프로파일링이나 서버 로그 정보를 살펴보는 것이 좋습니다.

    최적화하세요.

    2. 이 오류 상황을 완화할 수 있는지 확인하려면 SocketTimeout을 적절하게 늘립니다.

    참고로.

    MongoDB를 사랑해주세요! 재미있게 보내세요!


    2017 MongoDB 중국어 커뮤니티 베이징 사용자 그룹 컨퍼런스가 2017년 6월 3일 13:00-18:00에 곧 개최됩니다

    티셔츠와 기타 작은 선물도 있어요! 헤헤!

    등록해주세요

    회신하다
    0
  • 취소회신하다