Docs Menu
Docs Home
/ /

연결 스톰 문제 해결

연결 스톰 은 연결 수가 갑작스러운 급증으로 나타나는 경우가 많으며 데이터베이스 성능 문제로 잘못 진단되는 경우가 많습니다.

이 페이지에서는 연결 폭풍 및 "too many connections" 오류의 일반적인 원인과 해결 방법을 설명합니다. 다음 섹션을 진행한 후에도 추가 지원 필요한 경우 기술 지원팀문의.

배포서버 연결 폭풍 또는 연결 제한 문제가 발생하고 있는지 확인하려면 serverStatus 명령을 실행 하고 다음 표시기를 확인합니다.

또한 배포의 로그 메시지 에서 connectionCount 속성이 빠르게 증가하는 많은 수의 "Connection accepted" 메시지나 느린 쿼리 로그 항목의 증가를 확인할 수 있습니다.

Atlas 배포서버에서는 Atlas UI 에서 클러스터 로 이동하여 Metrics을 선택한 다음 Connections 를 선택하여 시간 경과에 따른 연결 수 그래프를 볼 수 있습니다.

다음 섹션에서는 연결 폭풍의 일반적인 원인과 해결 방법에 대해 설명합니다.

minPoolSizemaxPoolSize보다 훨씬 낮게 설정하다 하면 드라이버 소수의 유휴 연결만 유지합니다. 워크로드가 많거나 재시작 후 드라이버 작업 풀 크기에 도달하기 위해 많은 새 연결을 빠르게 열어야 하므로 새 연결이 급증할 수 있습니다.

서버 또는 쿼리 지연 시간 증가하면 개별 연결이 더 오랫동안 활성 상태로 유지됩니다. 이렇게 하면 드라이버 들어오는 요청을 처리하다 위해 추가 연결을 강제로 열어 총 연결 수가 증가합니다.

connections.active 값이 높고 쿼리 지연 시간 길어지면 드라이버 연결 문자열 에서 minPoolSizemaxPoolSize 에 가까운 값으로 설정하다 . 이렇게 하면 연결 풀 미리 워밍업하고 부하가 걸린 상태에서 새 연결을 많이 열 필요가 줄어듭니다.

애플리케이션 트래픽이 급격히 증가하면 사용 가능한 연결 풀 고갈되어 드라이버 새 연결을 빠르게 열어야 할 수 있습니다.

트래픽 증가에 따라 연결 스파이크가 발생하는 경우 드라이버 연결 문자열 에서 minPoolSizemaxPoolSize 에 더 가까운 값으로 설정하는 것이 좋습니다. 이렇게 하면 드라이버 새 연결을 빠르게 열 필요 없이 트래픽 급증을 처리하다 있도록 충분한 사전 설정된 연결을 유지할 수 있습니다.

네트워크 장애, 롤링 재시작 또는 갑작스러운 애플리케이션 계층 확장 이벤트로 인해 애플리케이션 인스턴스가 동시에 다시 연결되어 새로운 연결 요청으로 서버 과부하될 수 있습니다.

배포서버 이벤트 또는 네트워크 중단 중에 연결 스파이크가 발생하는 경우 maxPoolSize 를 설정하여 각 애플리케이션 인스턴스 열 수 있는 총 연결 수를 제한하는 것이 좋습니다. 이렇게 하면 동시 재연결 이벤트의 영향 제한됩니다.

단일 공유 인스턴스를 재사용하는 대신 모든 요청 또는 함수 호출에 대해 새 MongoClient 를 만드는 경우 각 클라이언트는 구성된 maxPoolSize까지 자체 독립적인 연결 풀을 열 수 있습니다. 이는 많은 동시 요청 또는 단기 실행 환경에서 열려 있는 총 연결 수가 증가하여 연결 폭풍을 트리거하다 수 있습니다.

요청 볼륨과 상관관계가 있는 연결 수가 꾸준히 증가하는 경우, 애플리케이션 요청 당 새로운 MongoClient 를 인스턴스화하는지 확인하고 모든 작업에서 MongoClient 을 단일 공유 인스턴스 로 구현하는 것을 고려하세요. 이렇게 하면 연결 사용이 안정화되고 풀 곱셈으로 인한 연결 수 급증을 방지할 수 있습니다.

샤딩된 클러스터에서 각 mongos 라우터는 각 샤드에서 연결 풀을 유지 관리합니다. 이러한 풀의 크기가 올바르게 지정되지 않으면 라우터가 동시에 많은 수의 내부 연결을 열어 애플리케이션 계층 의 연결 폭풍이 샤드 계층 으로 전파될 수 있습니다.

mongos 프로세스에서 연결 폭풍이 발생하는 경우 다음 사항을 고려하세요.

각 MongoDB Atlas 클러스터 계층 노드 당 최대 동시 수신 연결 수를 적용합니다. 애플리케이션 이 계층 허용하는 것보다 더 많은 연결을 여는 경우 클러스터 다음 오류와 함께 새 연결 요청을 거부할 수 있습니다.

connection refused because too many open connections

부하가 증가하면서 발생하는 연결 거부가 발생하고 풀 설정을 조정한 후에도 개선되지 않는 경우, connections.current 이(가 ) 클러스터 계층 의 한도에 도달하거나 근접해 있는지 확인하세요. 클러스터 계층 별 연결 제한을 보려면 Atlas 서비스 제한을 참조하세요.

연결 수가 클러스터 계층 제한에 도달하거나 이에 근접한 경우 더 높은 클러스터 계층 으로 업그레이드하여 노드당 연결 제한을 늘리는 것이 좋습니다. 클러스터 확장하다 하려면 클러스터 수정을 참조하세요.

연결 폭풍이 해결되었는지 확인하려면 다음을 수행합니다.

  • serverStatus 를 다시 실행하고 connections.currentconnections.available에 비해 예상 수준으로 반환되었는지 확인합니다.

  • mongod 또는 mongos 로그에 더 이상 연결 관련 오류가 표시되지 않는지 확인합니다.

  • Atlas 배포서버에서 Atlas Metrics 보기의 연결 수 그래프 기준선으로 돌아갔는지 확인합니다.

문제가 지속되면 기술 지원팀 문의 . 지원 에 문의하기 전에 다음 정보를 수집하세요.

  • 다음의 출력 db.serverStatus()

  • mongod 또는 mongos 의 연결 관련 오류 또는 경고를 표시하는 로그 발췌문

  • 특히 maxPoolSize, minPoolSizewaitQueueTimeoutMS값을 가진 운전자 연결 문자열

  • Atlas 배포의 경우 다음이 포함됩니다.

    • 애플리케이션 인스턴스 수 및 배포서버 토폴로지

    • 문제가 발생한 기간 동안의 Atlas Connections 그래프 스크린샷

돌아가기

성능 조정

이 페이지의 내용