연결 스톰은 연결 수가 갑작스러운 급증으로 나타나는 경우가 많으며 데이터베이스 성능 문제로 잘못 진단되는 경우가 많습니다.
이 페이지에서는 연결 폭풍 및 오류의 일반적인 원인과 해결 방법을 "too many connections" 설명합니다. 다음 섹션을 진행한 후에도 추가 지원 필요한 경우 기술 지원팀 문의 .
전제 조건 검사
배포서버 연결 폭풍 또는 연결 제한 문제가 발생하고 있는지 확인하려면 명령을 실행 하고 serverStatus 다음 표시기를 확인합니다.
~의 급격한 증가
connections.current~의 급격한 증가
connections.active
또한 배포의 로그 메시지에서 "Connection accepted" 속성이 빠르게 증가하는 많은 수의 connectionCount 메시지나 느린 쿼리 로그 항목의 증가를 확인할 수 있습니다.
Atlas 배포서버에서는 Atlas UI 에서 클러스터 로 이동하여 Metrics을 선택한 다음 Connections 를 선택하여 시간 경과에 따른 연결 수 그래프를 볼 수 있습니다.
일반적인 문제 및 해결 방법
다음 섹션에서는 연결 폭풍의 일반적인 원인과 해결 방법에 대해 설명합니다.
잘못 구성된 연결 풀 설정
minPoolSize 를 보다 훨씬 낮게 maxPoolSize 설정하다 하면 운전자 소수의 유휴 연결만 유지합니다. 워크로드가 많거나 재시작 후 운전자 작업 풀 크기에 도달하기 위해 많은 새 연결을 빠르게 열어야 하므로 새 연결이 급증할 수 있습니다.
높은 서버 또는 쿼리 지연 시간
서버 또는 쿼리 지연 시간 증가하면 개별 연결이 더 오랫동안 활성 상태로 유지됩니다. 이렇게 하면 운전자 들어오는 요청을 처리하다 위해 추가 연결을 강제로 열어 총 연결 수가 증가합니다.
connections.active 값이 높고 쿼리 지연 시간 길어지면 운전자 연결 문자열 에서 minPoolSize 를 maxPoolSize 에 가까운 값으로 설정하다 . 이렇게 하면 연결 풀 미리 워밍업하고 부하가 걸린 상태에서 새 연결을 많이 열 필요가 줄어듭니다.
운영 부하 증가
애플리케이션 트래픽이 급격히 증가하면 사용 가능한 연결 풀 고갈되어 운전자 새 연결을 빠르게 열어야 할 수 있습니다.
트래픽 증가에 따라 연결 스파이크가 발생하는 경우 운전자 연결 문자열 에서 minPoolSize 를 maxPoolSize 에 더 가까운 값으로 설정하는 것이 좋습니다. 이렇게 하면 운전자 새 연결을 빠르게 열 필요 없이 트래픽 급증을 처리하다 있도록 충분한 사전 설정된 연결을 유지할 수 있습니다.
일시적인 네트워크 이벤트 또는 애플리케이션 재시작
네트워크 중단, 롤링 재시작 또는 갑작스러운 애플리케이션 계층 확장 이벤트로 인해 애플리케이션 인스턴스가 동시에 다시 연결되어 새로운 연결 요청으로 서버 과부하될 수 있습니다.
배포서버 이벤트 또는 네트워크 중단 중에 연결 스파이크가 발생하는 경우 maxPoolSize 를 설정하여 각 애플리케이션 인스턴스 열 수 있는 총 연결 수를 제한하는 것이 좋습니다. 이렇게 하면 동시 재연결 이벤트의 영향 제한됩니다.
요청별 MongoClient 생성
단일 공유 인스턴스 재사용하는 대신 모든 요청 또는 함수 호출에 대해 새 를 만드는 경우 각 클라이언트 구성된 까지 자체 독립적인 연결 풀 열 수 있습니다. 이는 많은 동시 요청 또는 단기 실행 환경에서 열려 있는 총 연결 수가 증가하여 연결 폭풍을 트리거하다 수 MongoClient maxPoolSize 있습니다.
요청 볼륨과 상관관계가 있는 연결 수가 꾸준히 증가하는 경우, 애플리케이션 요청 당 새로운 MongoClient 를 인스턴스화하는지 확인하고 모든 작업에서 MongoClient 을 단일 공유 인스턴스 로 구현하는 것을 고려하세요. 이렇게 하면 연결 사용이 안정화되고 풀 곱셈으로 인한 연결 수 급증을 방지할 수 있습니다.
샤드 클러스터에서 잘못 구성된 라우터 풀
샤딩된 클러스터에서 각 라우터는 각 샤드 에서 연결 풀을 유지 관리합니다. 이러한 풀의 크기가 올바르게 지정되지 않으면 라우터가 동시에 많은 수의 내부 연결을 열어 애플리케이션 계층 의 연결 폭풍이 샤드 계층 으로 전파될 수 mongos 있습니다.
프로세스에서 연결 폭풍이 발생하는 mongos 경우 다음 사항을 고려하세요.
taskExecutor매개 변수를 설정하여 각 라우터의 연결 풀 수를taskExecutorPoolSize제한합니다.및
ShardingTaskExecutorPoolMinSize매개변수를 사용하여 각 라우터 풀의ShardingTaskExecutorPoolMaxSize최소 및 최대 연결 수를 제어합니다.
부족 프로비저닝된 MongoDB Atlas 클러스터
각 MongoDB Atlas cluster 계층 노드 당 최대 동시 수신 연결 수를 적용합니다. 애플리케이션 이 계층 허용하는 것보다 더 많은 연결을 여는 경우 클러스터 다음 오류와 함께 새 연결 요청을 거부할 수 있습니다.
connection refused because too many open connections
부하가 증가하면서 발생하는 연결 거부가 발생하고 풀 설정을 조정한 후에도 개선되지 않는 connections.current 경우, 이(가 ) 클러스터 계층 의 한도에 도달하거나 근접해 있는지 확인하세요. 클러스터 계층 별 연결 제한을 보려면 Atlas 서비스 제한을 참조하세요.
연결 수가 클러스터 계층 제한에 도달하거나 이에 근접한 경우 더 높은 클러스터 계층 으로 업그레이드하여 노드당 연결 제한을 늘리는 것이 좋습니다. 클러스터 확장하다 하려면 클러스터 수정을 참조하세요.
해결 방법 확인
연결 폭풍이 해결되었는지 확인하려면 다음을 수행합니다.
를 다시 실행하고
serverStatus가connections.current에 비해 예상 수준으로 반환되었는지 확인합니다.connections.availableAtlas 배포서버에서 Atlas Metrics 보기의 연결 수 그래프 기준선으로 돌아갔는지 확인합니다.