mongodb 메모리 사용을 제한하는 옵션이 있습니까?
Mongo-DBv1.8.1을 사용하고 있습니다. 내 서버 메모리는 4GB이지만 Mongo-DB는 3GB 이상을 사용하고 있습니다. Mongo-DB에 메모리 제한 옵션이 있습니까?.
MongoDB 3.2 이상 버전을 실행중인 경우 위에서 언급 한대로 wiredTiger
캐시 를 제한 할 수 있습니다 .
에서 /etc/mongod.conf
추가 wiredTiger
부분
...
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
...
이렇게하면 캐시 크기가 1GB로 제한 되며 문서에 더 많은 정보가 있습니다.
이것은 나를 위해 문제를 해결 실행 ubuntu 16.04
하고mongoDB 3.2
추신 : 구성을 변경 한 후 mongo 데몬을 다시 시작하십시오.
$ sudo service mongod restart
# check the status
$ sudo service mongod status
3.2부터 MongoDB는 WiredTiger를 기본 스토리지 엔진으로 사용합니다. 이전 버전에서는 MMAPv1을 기본 스토리지 엔진으로 사용했습니다.
- WiredTiger를 통해 MongoDB는 WiredTiger 내부 캐시와 파일 시스템 캐시를 모두 활용합니다.
- MongoDB 3.2에서 WiredTiger 내부 캐시는 기본적 으로 RAM의 60 %에서 1GB를 뺀 값 또는 1GB 중 더 큰 값을 사용합니다 .
- 최대 10GB의 RAM이있는 시스템의 경우 새 기본 설정은 3.0 기본 설정보다 작거나 같습니다 (MongoDB 3.0의 경우 WiredTiger 내부 캐시는 설치된 물리적 RAM의 절반 또는 1GB 중 더 큰 쪽을 사용합니다). RAM이 10GB 이상인 시스템의 경우 새 기본 설정은 3.0 설정보다 큽니다.
wiredTriggered 캐시를 제한하려면 .config 파일에 다음 줄을 추가합니다.
wiredTigerCacheSizeGB = 1
이 질문은 몇 번 요청되었습니다 ...
이 관련 질문 / 답변 (아래 인용)을 참조하십시오 ... Mongodb에서 사용하는 캐싱을 해제하는 방법은 무엇입니까?
MongoDB는 (적어도 사용 가능한 메모리를 많이 사용하는 것처럼 보이지만) 실제로 메모리를 해제하도록 OS의 VMM에 맡깁니다 (MongoDB 문서의 캐싱 참조 ).
MongoDB를 다시 시작하여 모든 메모리를 해제 할 수 있어야합니다.
그러나 어느 정도 MongoDB는 실제로 메모리를 "사용"하지 않습니다.
예를 들어 MongoDB 문서에서 서버 메모리 사용량 확인 ...
플랫폼에 따라 매핑 된 파일이 프로세스의 메모리로 표시 될 수 있지만 이는 엄격하게 정확하지 않습니다. Unix top은 실제로 적절한 것보다 mongod에 더 많은 메모리를 표시 할 수 있습니다. 운영 체제 (특히 OS에 따라 가상 메모리 관리자)는 "메모리 매핑 파일"이있는 메모리를 관리합니다. 이 번호는 일반적으로 "free -lmt"와 같은 프로그램에 표시됩니다.
이를 "캐시 된"메모리라고합니다.
MongoDB는 LRU ( 최소 최근 사용 ) 캐시 알고리즘을 사용하여 릴리스 할 "페이지"를 결정합니다.이 두 질문에서 더 많은 정보를 찾을 수 있습니다.
- MongoDB 제한 메모리
- MongoDB 인덱스 / RAM 관계
- Mongod는 메모리 제한으로 시작합니다 (당신 은 할 수 없습니다 .)
Linux에서 cgroup을 사용하여 mongod 프로세스 사용을 제한 할 수 있습니다.
cgroup을 사용하면 몇 가지 간단한 단계로 작업을 수행 할 수 있습니다.
제어 그룹 만들기 :
cgcreate -g memory:DBLimitedGroup
(시스템에 cgroups 바이너리가 설치되어 있는지 확인하고 그 방법은 좋아하는 Linux 배포 설명서를 참조하십시오)
이 그룹에 사용할 수있는 메모리 양을 지정합니다.
echo 16G > /sys/fs/cgroup/memory/DBLimitedGroup/memory.limit_in_bytes
이 명령은 메모리를 16G로 제한합니다 (좋은 점은 malloc 할당과 OS 캐시 모두에 대한 메모리를 제한 함).
이제 이미 캐시에 남아있는 페이지를 삭제하는 것이 좋습니다.
sync; echo 3 > /proc/sys/vm/drop_caches
마지막으로 생성 된 제어 그룹에 서버를 할당합니다.
cgclassify -g memory:DBLimitedGroup \`pidof mongod\`
이것은 16GB 메모리로 제한된 그룹에 실행중인 mongod 프로세스를 할당합니다.
출처 : Cgroup을 사용하여 MySQL 및 MongoDB 메모리 사용 제한
MongoDB가 사용하는 메모리 양을 구성 할 수 없다고 생각하지만 괜찮습니다 (아래 참조).
공식 출처 에서 인용하려면 :
가상 메모리 크기와 상주 크기는 mongod 프로세스의 경우 매우 큰 것처럼 보입니다. 이것은 무해합니다. 가상 메모리 공간은 열려 있고 매핑 된 데이터 파일의 크기보다 큽니다. 상주 크기는 컴퓨터의 다른 프로세스에서 사용하지 않는 메모리 양에 따라 달라집니다.
즉, Mongo는 다른 프로그램이 요청하면 메모리를 사용하도록 허용합니다.
Windows의 경우 MongoDB가 사용하는 메모리 양을 제어 할 수있는 것 같습니다. Captain Codeman의이 자습서를 참조하십시오.
가상화없이 Windows에서 MongoDB 메모리 사용 제한
실제로 Windows에서 WSRM (Windows System Resource Manager)을 사용할 수있는 것처럼 메모리를 제한하는 몇 가지 트릭이 있지만 일반적으로 Mongo는 다른 시스템과 많은 경합없이 메모리를 사용할 수있을 때 전용 서버에서 가장 잘 작동합니다.
운영 체제는 필요에 따라 다른 프로세스에 메모리를 할당하려고하지만 실제로 다른 시스템에도 높은 메모리 요구 사항이있는 경우 성능 문제가 발생할 수 있습니다.
정말로 메모리를 제한해야하고 단일 서버 만 있다면 가장 좋은 방법은 가상화입니다.
이는 다음 두 기사의 지식을 결합하여 cgroup으로 수행 할 수 있습니다. https://www.percona.com/blog/2015/07/01/using-cgroups-to-limit-mysql-and-mongodb-memory-usage /
http://frank2.net/cgroups-ubuntu-14-04/
Ubuntu 14.04에 대한 구성 및 초기화 파일을 만드는 작은 셸 스크립트는 여기에서 찾을 수 있습니다. http://brainsuckerna.blogspot.com.by/2016/05/limiting-mongodb-memory-usage-with.html
그렇게 :
sudo bash -c 'curl -o- http://brains.by/misc/mongodb_memory_limit_ubuntu1404.sh | bash'
mongod --wiredTigerCacheSizeGB 2 xx
One thing you can limit is the amount of memory mongodb uses while building indexes. This is set using the maxIndexBuildMemoryUsageMegabytes
setting. An example of how its set is below:
mongo --eval "db.adminCommand( { setParameter: 1, maxIndexBuildMemoryUsageMegabytes: 70000 } )"
There is no reason to limit MongoDB cache as by default the mongod process will take 1/2 of the memory on the machine and no more. The default storage engine is WiredTiger. "With WiredTiger, MongoDB utilizes both the WiredTiger internal cache and the filesystem cache."
You are probably looking at top and assuming that Mongo is using all the memory on your machine. That is virtual memory. Use free -m:
total used free shared buff/cache available
Mem: 7982 1487 5601 8 893 6204
Swap: 0 0 0
Only when the available metric goes to zero is your computer swapping memory out to disk. In that case your database is too large for your machine. Add another mongodb instance to your cluster.
Use these two commands in the mongod console to get information about how much virtual and physical memory Mongodb is using:
var mem = db.serverStatus().tcmalloc;
mem.tcmalloc.formattedString
------------------------------------------------
MALLOC: 360509952 ( 343.8 MiB) Bytes in use by application
MALLOC: + 477704192 ( 455.6 MiB) Bytes in page heap freelist
MALLOC: + 33152680 ( 31.6 MiB) Bytes in central cache freelist
MALLOC: + 2684032 ( 2.6 MiB) Bytes in transfer cache freelist
MALLOC: + 3508952 ( 3.3 MiB) Bytes in thread cache freelists
MALLOC: + 6349056 ( 6.1 MiB) Bytes in malloc metadata
MALLOC: ------------
MALLOC: = 883908864 ( 843.0 MiB) Actual memory used (physical + swap)
MALLOC: + 33611776 ( 32.1 MiB) Bytes released to OS (aka unmapped)
MALLOC: ------------
MALLOC: = 917520640 ( 875.0 MiB) Virtual address space used
MALLOC:
MALLOC: 26695 Spans in use
MALLOC: 22 Thread heaps in use
MALLOC: 4096 Tcmalloc page size
this worked for me on an AWS instance, to at least clear the cached memory mongo was using. after this you can see how your settings have had effect.
ubuntu@hongse:~$ free -m
total used free shared buffers cached
Mem: 3952 3667 284 0 617 514
-/+ buffers/cache: 2535 1416
Swap: 0 0 0
ubuntu@hongse:~$ sudo su
root@hongse:/home/ubuntu# sync; echo 3 > /proc/sys/vm/drop_caches
root@hongse:/home/ubuntu# free -m
total used free shared buffers cached
Mem: 3952 2269 1682 0 1 42
-/+ buffers/cache: 2225 1726
Swap: 0 0 0
Adding to the top voted answer, in case you are on a low memory machine and want to configure the wiredTigerCache
in MBs instead of whole number GBs, use this -
storage:
wiredTiger:
engineConfig:
configString : cache_size=345M
Source - https://jira.mongodb.org/browse/SERVER-22274
참고URL : https://stackoverflow.com/questions/6861184/is-there-any-option-to-limit-mongodb-memory-usage
'Program Tip' 카테고리의 다른 글
HTML 웹 페이지에서 CSS 및 Javascript 코드를 어디에 넣어야합니까? (0) | 2020.12.11 |
---|---|
Chrome 브라우저에서 deviceready 이벤트를 시작하는 방법 (phonegap 프로젝트 디버그 시도) (0) | 2020.12.11 |
C ++ 11에서 명시 적으로 삭제 된 멤버 함수를 사용하여 복사 할 수없는 기본 클래스에서 상속 할 가치가 있습니까? (0) | 2020.12.11 |
CURL 오류 : 수신 실패 : 피어에 의한 연결 재설정-PHP Curl (0) | 2020.12.11 |
WPF의 스택 패널에서 왼쪽과 오른쪽 모두에 컨트롤 정렬 (0) | 2020.12.11 |