mongodb 메모리 사용을 제한하는 옵션이 있습니까?
Mongo-DB1.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로 제한됩니다.자세한 내용은 Doc를 참조하십시오.
이것으로 문제가 해결되었습니다.ubuntu 16.04
★★★★★★★★★★★★★★★★★」mongoDB 3.2
PS: 설정 변경 후 mongo 데몬을 재시작합니다.
$ sudo service mongod restart
# check the status
$ sudo service mongod status
3.2부터 MongoDB는 WiredTiger를 기본 스토리지 엔진으로 사용합니다.이전 버전에서는 MMAPv1을 기본 스토리지 엔진으로 사용했습니다.
- WiredTiger를 사용하면 MongoDB는 WiredTiger 내부 캐시와 파일 시스템 캐시를 모두 사용합니다.
- MongoDB 3.2에서는 기본적으로 WirelessTiger 내부 캐시는 RAM의 60%에서 1GB 또는 1GB 중 하나를 사용합니다.
- 최대 10GB의 RAM을 탑재한 시스템의 경우 새로운 디폴트 설정은 3.0 디폴트 설정 이하입니다(MongoDB 3.0의 경우 WiredTiger 내부 캐시는 설치된 물리 RAM의 1GB 또는 절반 중 큰 것을 사용합니다).RAM이 10GB를 초과하는 시스템의 경우 새로운 기본 설정은 3.0 설정보다 큽니다.
wiredTriggered Cache를 제한하려면 다음 행을 .config 파일에 추가합니다.
wiredTigerCacheSizeGB = 1
이 질문은 여러 번 한 적이 있습니다.
관련 질문/답변(아래 인용)을 참조하십시오.Mongodb에 의해 사용되는 캐싱을 어떻게 해제합니까?
MongoDB는 (적어도) 많은 사용 가능한 메모리를 소비하는 것처럼 보이지만, 실제로는 메모리를 해방하도록 OS의 VMM에 맡깁니다(MongoDB 문서의 캐싱 참조).
MongoDB를 재부팅하면 모든 메모리를 해제할 수 있습니다.
그러나, 어느 정도 MongoDB는 실제로 메모리를 "사용"하고 있지 않습니다.
예를 들어 MongoDB 문서 Checking Server Memory Usage에서...
플랫폼에 따라서는 프로세스에서 매핑파일이 메모리로 표시되는 경우가 있습니다만, 이것은 엄밀하게는 올바르지 않습니다.Unix top은 mongod에 대해 실제로 적절한 메모리보다 훨씬 더 많은 메모리를 보여줄 수 있습니다.운영체제(특히 가상메모리 매니저는 OS에 따라 다름)는 "메모리 매핑 파일"이 있는 메모리를 관리합니다.이 숫자는 보통 "free -lmt"와 같은 프로그램에 표시됩니다.
이것은 "캐치된" 메모리라고 불립니다.
MongoDB는 LRU(Last Recently Used) 캐시 알고리즘을 사용하여 공개하는 "페이지"를 결정합니다.이 두 가지 질문에서 자세한 정보를 찾을 수 있습니다.
- MongoDB 제한 메모리
- MongoDB 인덱스/RAM 관계
- Mongod는 메모리 제한부터 시작합니다(할 수 없습니다).
Linux에서 cgroup을 사용하여 mongod 프로세스의 사용을 제한할 수 있습니다.
cgroups를 사용하면 몇 가지 간단한 단계로 작업을 수행할 수 있습니다.
제어 그룹 만들기:
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\`
그러면 실행 중인 mongod 프로세스가 16GB 메모리만으로 제한된 그룹에 할당됩니다.
출처: Cgroups를 사용한 MySQL 및 MongoDB 메모리 사용 제한
MongoDB의 메모리 사용량은 설정할 수 없다고 생각합니다만, 괜찮습니다(아래 참조).
공식 소식통의 말을 인용하자면:
가상 메모리 크기와 상주 크기는 mongod 프로세스에서 매우 큰 것으로 보입니다.가상 메모리 용량은 열려 있는 데이터 파일의 크기보다 커집니다.기계의 다른 프로세스가 사용하지 않는 메모리의 양에 따라 달라집니다.
즉, 몽고는 다른 프로그램이 메모리를 요구하면 메모리를 사용하게 할 것이다.
mongod --wiredTigerCacheSizeGB 2 xx
, 「메모리 부족」의 을 에, 한다.wiredTigerCache
GB'가 'MB')를합니다.
storage:
wiredTiger:
engineConfig:
configString : cache_size=345M
출처 - https://jira.mongodb.org/browse/SERVER-22274
Windows 에서는, MongoDB 가 사용하는 메모리의 양을 제어할 수 있는 것 같습니다.Captain Codeman 에서 다음 튜토리얼을 참조해 주세요.
가상화를 사용하지 않는 Windows에서 MongoDB 메모리 사용 제한
메모리 제한에는 Windows 시스템 리소스 매니저(WSRM)를 사용할 수 있는 등 몇 가지 방법이 있습니다만, 일반적으로 Mongo는 다른 시스템과 큰 경합 없이 메모리를 자유롭게 사용할 수 있는 전용 서버에서 가장 적합합니다.
operating system은 필요에 따라서 다른 프로세스에 메모리를 할당하려고 합니다만, 실제로는 다른 시스템에도 메모리 요건이 높은 경우는, 퍼포먼스의 문제가 발생할 가능성이 있습니다.
메모리를 제한하고 서버를 1대만 사용하는 경우에는 가상화가 최선의 방법입니다.
이것은, 다음의 2개의 기사에서 얻은 지식을 조합하는 것으로, cgroups 를 사용해 실시할 수 있습니다.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의 Config 파일과 init 파일을 작성하는 작은 셸 스크립트를 다음 URL에서 찾을 수 있습니다.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 프로세스가 머신의 메모리 1/2를 차지하기 때문에 MongoDB 캐시를 제한할 이유가 없습니다.기본 스토리지 엔진은 WiredTiger입니다."WiredTiger를 통해 MongoDB는 WiredTiger 내부 캐시와 파일 시스템 캐시를 모두 사용합니다."
당신은 아마도 상단을 보고 Mongo가 당신의 기계에 있는 모든 메모리를 사용하고 있다고 가정하고 있을 것이다.그것이 가상 메모리입니다.free -m 사용:
total used free shared buff/cache available
Mem: 7982 1487 5601 8 893 6204
Swap: 0 0 0
사용 가능한 메트릭이 0이 되었을 경우에만 컴퓨터가 메모리를 디스크로 스왑합니다.이 경우 데이터베이스가 컴퓨터에 비해 너무 큽니다.클러스터에 다른 mongodb 인스턴스를 추가합니다.
Mongodb가 사용하고 있는 가상 메모리와 물리 메모리의 양에 대한 정보를 얻으려면 mongod 콘솔에서 다음 2개의 명령을 사용합니다.
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
한 가지 제한할 수 있는 것은 mongodb가 인덱스를 작성할 때 사용하는 메모리 양입니다.이 설정은,maxIndexBuildMemoryUsageMegabytes
설정.그 세트의 예를 다음에 나타냅니다.
mongo --eval "db.adminCommand( { setParameter: 1, maxIndexBuildMemoryUsageMegabytes: 70000 } )"
적어도 Mongo가 사용하던 캐시 메모리를 클리어하기 위해 AWS 인스턴스에서 작동했습니다.이 후에 설정이 어떻게 영향을 미쳤는지 알 수 있습니다.
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
Docker를 사용하는 경우 Docker 이미지 매뉴얼(Setting WiredTiger 캐시 크기 제한 섹션)을 읽으면 컨테이너에 부과된 메모리 제한에 관계없이 사용 가능한 모든 메모리를 사용하도록 기본값이 설정되어 있으므로 DB 구성에서 직접 RAM 사용량을 제한해야 합니다.
- 을 창조하다
mongod.conf
삭제:
# Limits cache storage
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 1 # Set the size you want
- 할 수 .
docker run --name mongo-container -v /path/to/mongod.conf:/etc/mongo/mongod.conf -d mongo --config /etc/mongo/mongod.conf
- 다른 방법으로는
docker-compose.yml
삭제:
version: '3'
services:
mongo:
image: mongo:4.2
# Sets the config file
command: --config /etc/mongo/mongod.conf
volumes:
- ./config/mongo/mongod.conf:/etc/mongo/mongod.conf
# Others settings...
언급URL : https://stackoverflow.com/questions/6861184/is-there-any-option-to-limit-mongodb-memory-usage
'programing' 카테고리의 다른 글
'for;;; { json data }'와 같은 Ajax 호출 응답은 무엇을 의미합니까? (0) | 2023.03.07 |
---|---|
asp.net MVC에서 Attribute 및 jquery AJAX 인증 (0) | 2023.03.07 |
jquery를 사용하여 워드프레스에서 현재 페이지 ID를 가져오는 방법 (0) | 2023.03.07 |
Angularjs $http.get() 및 목록 바인딩 (0) | 2023.03.07 |
@Service 주석은 어디에 보관해야 합니까?인터페이스 또는 구현? (0) | 2023.03.07 |