MongoDB를은 96기가바이트 루트 서버의 메모리 부족합니다.메모리 안전한 MongoDB를 작업
합니까 MongoDB를, 예를 들어를 "안전 모드"에서 쿼리 또는 작업을 실행할 수있는 옵션이 있습니다 기억을 너무 많이 자르지 않고? 매우 민감하여 충돌이 발생할 수 있습니다. 인덱싱되지 않은 타임 스탬프 필드에서 $ lte/$ gt를 사용하여 일부 검색 쿼리를 실행합니다.
MongoDB를은 96기가바이트 루트 서버의 메모리 부족합니다.메모리 안전한 MongoDB를 작업
합니까 MongoDB를, 예를 들어를 "안전 모드"에서 쿼리 또는 작업을 실행할 수있는 옵션이 있습니다 기억을 너무 많이 자르지 않고? 매우 민감하여 충돌이 발생할 수 있습니다. 인덱싱되지 않은 타임 스탬프 필드에서 $ lte/$ gt를 사용하여 일부 검색 쿼리를 실행합니다.
내가 그것을 통제 할 수없는,하지만해야 거기 해제해야한다 "안전"에 대한 MongoDB의의 구성 설정 RAM이 일단 한계를 넘으면? 어쩌면 다른 프로세스를 차단하거나 oom killer에 의해 중단되기 전에?
MongoDB를 자체 메모리 관리를 사용하지 않습니다. 대신 OS의 LRU를 사용합니다. OS는 그것이 당신의 작업 집합의 모든 당신이 대부분의 페이지 폴트를 교환되어, MongoDB를 같이 MongoDB를위한 예비있는 RAM의 양보다 더 큰되지 않습니다 일명 mongod
에 할당 된 메모리의 양을 사용했기 때문에 그렇게 크게 문서를 페이징 귀하 데이터 (페이징에 대한 좋은 참조 : http://en.wikipedia.org/wiki/Paging).
는 그러나 더 나쁜 실행하기 때문에 난 강력하게 당신이 실제로 당신이 mongod
를 실행하는 데 사용하는 mongo
사용자에 ulimit
을 사용할 수 있습니다, 특히 리눅스에,이 경우 MongoDB를 제한 권하고 싶지 않다 : http://docs.mongodb.org/manual/administration/ulimit/
합니까를 MongoDB는 쿼리 나 작업을 "안전 모드"로 실행할 수있는 옵션을 가지고 있습니다. 기억을 너무 많이 자르지 않고?
아니요.
매우 민감하고 충돌이 발생할 수 있습니다 (예 : 인덱싱되지 않은 타임 스탬프 필드에서 $ lte/$ gt를 사용하여 일부 검색 쿼리를 실행합니다.
당연히이 MongoDB를위한 OOM 예외가 발생하지해야 어딘가에 메모리 누수를 나타낼 수 있습니다 : 당신이 MongoDB를 실행하는 시스템에 상주 메모리의 크기를 제한하는 경우 http://docs.mongodb.org/manual/administration/ulimit/
당신은 운영을 허용 위험 시스템을 사용하여 일반적인 상황에서 mongod 프로세스를 종료합니다. 이 값을 설정하지 마십시오. 운영 체제 (예 :리눅스)는 OOM 킬러와 함께 mongod를 죽이고 serverStatus의 출력을 검사하여 MongoDB가 메모리를 누출시키지 않도록합니다.
나는 내 RAM이 적다는 것을 믿을 수 없다. 유일하게 사용하는 컬렉션은 50GB이고, 총 RAM은 96GB 미만입니다. 해시 필드에는 단 하나의 단일 색인 만 있습니다. 물론, "주문"을 받으려면 타임 스탬프에 대한 색인을 시험해 보는 것이 좋습니다. 그러나 이것은 일부 .find 쿼리가 수행 될 때 oom killer에 의해 현재 그리고 정기적으로 죽어 불안정한 이유가되어서는 안됩니다. .find와는 별도로 초당 약 20 개의 인서트가 있습니다. 내 의견으로는, 특히 색인이 거의없는 경우가 많지 않습니다. – ledy
@ledy 여기에 또 다른 문제가있을 수는 없겠지만, 메모리 누수가 발생했을 수도 있습니다. 그에 대한 편집을 추가했습니다. – Sammaye
ulimit은 잘되어야합니다 : ulimit -a http://nopaste.info/340ff18546. HTML과 serverStatus는 경고가 없습니다 : NumberInt (64), "상주": \t { "비트"는 mem (35877)를 NumberInt을 "가상"NumberInt (393373), "지원"사실, "매핑을 ": NumberInt (196545), "mappedWithJournal ": NumberInt (393090) } – ledy
매우 민감한 것으로 보인다 예를 들어, 추락 할 수있다 인덱싱되지 않은 타임 스탬프 필드에서 $ lte/$ gt를 사용하여 일부 검색 쿼리를 실행합니다.
mongod 인스턴스가 많은 페이지를 RAM으로 스왑하기 때문에 OOM 킬러가 그것을 죽입니다. RAM에 대해 대다수의 프로세스가있을 수 있습니다. 당신은 다음과 같이 mongod 데몬을 죽이지 리눅스를 지시 할 수 있습니다 :
sudo echo -17 > /proc/<process if of mongod>/oom_adj
당신은 불행하게도, 메모리 MongoDB를 사용하는 양을 제어 할 수 없습니다. background indexing docs on mongodb을 살펴 보시기 바랍니다. 그리고 좀 더 유용한 링크 :
Linux를 사용하고 있습니까? – Adil
예, 2.6.32-5-amd64, debian. – ledy
님이 mongo와 호환되지 않습니까? dmesg | grep -i numa [0.000000] NUMA : 할당 된 memnodemap이 40000 - 58840 [0.000000] NUMA : 해시 이동에 20을 사용합니다. – ledy