Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

연결 스톰 문제 해결

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

connection refused because too many open connections

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

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

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

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

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

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

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

  • 다음의 출력 db.serverStatus()

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

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

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

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

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

돌아가기

성능 조정

이 페이지의 내용