사용 가능한 모든 RAM을 사용하지 않는 MongoDB


9

몽고 클러스터에 약 200GB의 가치있는 데이터가 저장되어 있습니다. mongo를 실행하는 인스턴스 중 하나의 실제 메모리는 8GB입니다. 이 인스턴스에서 다른 결과는 없습니다. Mongo의 문서 (예 : http://www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage )를 기반으로 이해할 수 있는 한 mongod 프로세스는 약 100 %를 사용해야합니다. 사용 가능한 실제 메모리 그러나 top명령 에서 다음 출력 을 보면 mongod 인스턴스가 2GB의 상주 메모리 만 사용하고 전혀 사용되지 않는 전체 2GB의 사용 가능한 실제 메모리가 있음을 알 수 있습니다.

누군가 나에게이 행동을 설명 할 수 있습니까? 여유 메모리가 2GB 인 이유는 무엇입니까?

top 산출:

top - 23:19:43 up 89 days, 20:05,  2 users,  load average: 0.41, 0.55, 0.59
Tasks: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.0%us,  1.3%sy,  0.0%ni, 93.9%id,  2.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8163664k total,  6131764k used,  2031900k free,    54976k buffers
Swap: 16771848k total,    10604k used, 16761244k free,  5367700k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                             
 1401 mongodb   20   0  174g 2.0g 1.9g S   23 26.2  18070:55 mongod
 ...

시스템 정보 :

$ uname -a
Linux aluminum 2.6.32-31-server #61-Ubuntu SMP Fri Apr 8 19:44:42 UTC 2011 x86_64 GNU/Linux

노트:

  • 이 클러스터에는 mongod가 예상하고 사용 가능한 모든 메모리를 사용하는 것처럼 동작하는 또 다른 인스턴스가 있습니다.
  • mongostat를 보면 페이지 오류가 지속적으로 발생하는 것처럼 보이므로 사용되는 메모리 양 증가 해야합니다 .
  • ( mongodb-user google 그룹 에서이 같은 질문 을했지만 응답이 없습니다.)

어떤 리눅스 배포판? 32 비트입니까 아니면 64 비트입니까? (편집 귀하의 출력을 질문 lsb-release -a하고 uname -a주세요)
Philᵀᴹ

감사. 추가 uname되었지만 lsb-release설치 하지 않았습니다 .
Chris W.

실수로 32 비트 버전의 MongoDB를 다운로드 했습니까? 32 비트 Mongo 인스턴스의 최대 크기는 2GB입니다.
Aaron

@ BryceAtNetwork23 nope; 우리는 mongodb 총 2GB 이상을 가지고 있습니다 (실제로 수백 기가).
Chris W.

@ChrisW는 데이터베이스 크기가 아니라 최대 메모리 크기를 의미합니다. 그리고 그것은 2GB를 잘 설명하는 것처럼 보입니다.
rfusca

답변:


5

상주 메모리 크기는 mongod프로세스가 실제로 터치 한 메모리의 페이지 수를 나타냅니다 . 메모리가 사용 가능한 메모리보다 현저히 낮고 데이터가 사용 가능한 메모리를 초과하면 (여러분의 메모리가 부족한 경우) 페이지를 아직 충분히 터치하지 않은 경우 일 수 있습니다.

이 경우인지 확인하려면을 실행해야합니다 free -m. 출력은 다음과 같습니다.

free -m
             total       used       free     shared    buffers     cached
Mem:          3709       3484        224          0         84       2412
-/+ buffers/cache:        987       2721
Swap:         3836        156       3680

필자의 예제에서 캐시는 총계에 가깝지 않으므로 mongod가 충분한 페이지를 건드리지 않았을뿐 아니라 파일 시스템 캐시는 아직 디스크에서 일반적으로 읽은 페이지로 채워지지 않았습니다.

이를위한 빠른 해결책은 touch 명령 (2.2에 추가됨) 일 것입니다. 데이터가 너무 커서 데이터를 너무 큰 경우에도 RAM에 모든 것을로드하려고 시도하기 때문에 큰 데이터 세트에주의를 기울여야합니다. 디스크 IO 및 페이지 결함). 확실히 메모리를 효과적으로 채울 것입니다 :)

캐시 된 값이 사용 가능한 총계에 가까우면 디스크에서 메모리로 읽히는 많은 수의 페이지가 mongod 프로세스와 관련이 없으므로 (따라서 만지지 않음) 문제입니다. 이러한 종류의 불일치에 대한 일반적인 후보는 미리 읽기입니다. 이미 특정 주제를 다른 곳 에서 자세히 다루었 으므로 필요한 경우 나중에 읽을 수 있도록 두 가지 답변을 연결하겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.