우리는 몇 주 동안 MongoDB를 사용 해 왔으며, 우리가 본 전반적인 추세는 mongodb가 너무 많은 메모리를 사용한다는 것입니다 (데이터 세트 + 인덱스의 전체 크기보다 훨씬 많은 양).
이미 통해 읽은 이 질문 과 이 질문에 , 그러나 아무도 내가, 그들이 실제로 이미 문서에 설명 된 무엇을 설명하고 직면했던 문제를 해결하기 위해 보이지 않는다.
다음은 htop 및 show dbs 명령 의 결과입니다 .
mongodb는 메모리 매핑 된 IO를 사용하므로 기본적으로 OS는 메모리의 캐싱을 처리하며 mongodb 는 이론적으로 다른 프로세스가 여유 메모리를 요청할 때 캐시 된 메모리를 제거해야하지만 우리가 본 것에서는 그렇지 않습니다.
OOM은 postgres, redis 등과 같은 다른 중요한 프로세스를 죽이기 시작합니다 (이 문제를 극복하기 위해 RAM이 183GB로 증가했지만 현재는 작동하지만 꽤 비쌉니다. mongo는 ~ 87GB의 램을 사용합니다. 전체 데이터 세트 크기의 거의 4 배)
그래서,
- 이 메모리 사용량이 실제로 예상되고 정상입니까? (문서에 따라 WiredTiger는 캐시에 최대 60 %의 RAM을 사용하지만 데이터 세트 크기를 고려할 때 86GB의 RAM을 사용할 수있는 충분한 데이터가 있습니까?)
- 메모리 사용량이 예상 되더라도 다른 프로세스가 더 많은 메모리를 요청하기 시작할 때 mongo가 할당 된 메모리를 포기하지 않는 이유는 무엇입니까? RAM을 늘리고 시스템을 완전히 불안정하게 만들기 전에 mongodb 자체를 포함하여 Linux oom에 의해 다양한 다른 실행 프로세스가 지속적으로 중단되었습니다.
감사 !