우리는 3 개의 node.js 앱이 실행되는 테스트 서버를 가지고 있습니다. 각 응용 프로그램은 동일한 서버에서 실행되는 동일한 MongoDB 데이터베이스 테스트 인스턴스를 사용합니다. 그래서 어떤 주어진 순간에 우리는 mongodb 서버에 최대 3 개의 다른 연결을 가지고 있습니다.mongod의 처리가 너무 많습니다
문제는 각 코드 배포 후 (기본적으로 현재 실행중인 프로세스를 죽이고 코드 업데이트 및 새 프로세스 시작) htop에 /usr/bin/mongod --config /etc/mongodb.conf
으로 표시되는 서버에서 새로운 프로세스 (단일 프로세스의 스레드)가 발생한다는 것입니다. 따라서 잠시 동안 테스트 서버를 다시 시작해야합니다. 그런 쓰레드가 너무 많아서 mongod 프로세스가 모든 RAM을 사용하기 때문에 테스트 서버를 다시 시작해야합니다.
나는 왜 이런 일이 일어나고 있으며이 문제를 해결하기위한 해결책을 찾고 있는지 잘 모르겠습니다.
우리가 간단히 node.js를 죽이면 연결 (그리고이 연결과 관련된 스레드)이 어떻게 든 살아 남기 때문에 nodejs 프로세스를 죽이는 대신 DB를 닫으면 정상적으로 종료되어야한다고 가정합니다 연결.
실제로 mongod는 데이터베이스가 아닌 클라이언트입니다. node.js가 어떻게 작동하는지 모른 채 나는 mongo 프로세스가 있어야한다는 것을 의문의 여지가 있습니다. Mongo는 클라이언트 인 mongo 콘솔이 될 것입니다. 따라서 node.js 인스턴스는 node.js mongodb 클라이언트가있는 내부적으로 보입니다. 하지만 node.j가 내부적 인 일을 어떻게하는지 모르겠습니다. 일반적으로 하위 프로세스가 종료되어야하므로 앱을 어떻게 종료하는지 (우아하거나 아님) 중요하지 않습니다. 그러나 정상적으로 종료하는 것이 일반적입니다. – philnate
@philnate 나는 '몽고'와 '몽고'의 차이점을 확실히 알고있다. 그러나 나는 mongodb와 관련된 htop에서 많은 프로세스를 볼 수있는 논리를 찾지 못했습니다. 그 모든 메모리를 복용하고 재부팅 서버가 사라진 후. 몽고와 관련된 좀비 프로세스 여야합니다. – AlexKey
설치가 mongod를 어떻게 든이 방법 (수동 시작)으로 호출하고있는 것으로 의심됩니다. 그러나 파일을 사용함에 따라 조금 이상합니다. /etc/mongodb.conf에 정의 된 IP가 있는지 확인하십시오. 앱이 항상 동일한 IP (mongod)에 연결되거나 동적으로 정의 된 IP입니까? 만약 그 프로세스가 좀비가된다면 ps (리소스 소비 및 Z 플래그 없음)로 이것을 볼 수 있어야합니다. 그러나이 포트가 사용 중일 때 다른 포트를 넘겨 줄 수 있는지는 알 수 없습니다. – philnate