AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

자체 관리 배포서버를 위한 ulimit UNIX 설정

Linux 및 macOS를 포함한 대부분의 UNIX 계열 운영 체제에서는 프로세스별 및 사용자별로 스레드, 파일, 네트워크 연결 등의 시스템 리소스 사용을 제한하고 제어할 수 있는 방법을 제공합니다. 이러한 "ulimit"는 단일 사용자가 너무 많은 시스템 리소스를 사용하는 것을 방지합니다. 경우에 따라 이러한 제한의 기본값이 낮아 정상적인 MongoDB 작업 중에 여러 가지 문제가 발생할 수 있습니다.

mongodmongos 는 각각 스레드와 파일 설명자를 사용하여 연결을 추적하고 내부 작업을 관리합니다. 이 섹션에서는 MongoDB의 일반적인 리소스 사용 패턴에 대해 간략하게 설명합니다. 이 수치를 배포서버 정보와 함께 사용하여 이상적인 ulimit 설정을 결정하십시오.

일반적으로 모든 mongodmongos 인스턴스입니다.

  • 두 개의 파일 디스크립터 하나의 스레드로 들어오는 각 연결을 추적합니다.

  • 는 각 내부 스레드 또는 pthread를 시스템 프로세스로 추적합니다.

  • mongod 인스턴스에서 사용 중인 각 데이터 파일에 대해 파일 디스크립터 1개입니다.

  • 2} 인스턴스에서 사용하는 각 저널 파일에 대한 파일 설명자 1개입니다.mongod

  • 복제본 세트에서 각 mongod 은 세트의 다른 모든 멤버에 대한 연결을 유지합니다.

mongodTTL 컬렉션, 복제 및 복제본 세트 상태 확인을 비롯한 여러 내부 프로세스에 백그라운드 스레드를 사용하며, 이 프로세스에는 여러 개의 추가 리소스가 필요할 수 있습니다.

2}는 클라이언트 연결을 위한 스레드 및 파일 설명자 외에도mongos 모든 구성 서버 및 모든 샤드(모든 복제본 세트의 모든 구성원이 포함됨)에 대한 연결을 유지해야 합니다.

mongos 의 경우 다음 동작을 고려하세요.

  • mongos{2} 인스턴스는 각 샤드에 대한 연결 풀을 유지하여 mongos 연결을 재사용하고 새 연결을 만들 필요 없이 요청을 신속하게 처리할 수 있도록 합니다.

  • 2} 런타임 옵션을 net.maxIncomingConnections 사용하여 들어오는 연결 수를 제한할 수 있습니다. 들어오는 연결 수를 제한하면 mongos mongod 인스턴스에 너무 많은 연결을 생성하는 캐스케이드 효과를 방지할 수 있습니다.

다음 예와 같이 시스템 프롬프트에서 ulimit 명령을 사용하여 시스템 제한을 확인할 수 있습니다.

$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 64000
-n: file descriptors 64000
-l: locked-in-memory size (kb) unlimited
-v: address space (kb) unlimited
-x: file locks unlimited
-i: pending signals 192276
-q: bytes in POSIX msg queues 819200
-e: max nice 30
-r: max rt priority 65
-N 15: unlimited

ulimit 다양한 리소스에 대한 사용자 별 제한 사항을나타냅니다. 따라서 mongod 인스턴스가 여러 프로세스 또는 여러 mongod 프로세스를 실행 중인 사용자로 실행되는 경우 이러한 리소스에 대한 경합이 표시될 수 있습니다. processes 값(즉 -u)은 별개의 프로세스와 하위 프로세스 스레드의 수를 합한 값을 나타냅니다.

Linux에서는 다음 형식의 명령을 실행하여 ulimit 설정을 변경할 수 있습니다.

ulimit -n <value>

ulimit 두 가지 형식이 있습니다.

  • "하드" ulimit: 사용자가 언제든 시점에서 활성화할 수 있는 최대 프로세스 수입니다. 루트 아닌 프로세스는 증가할 수 없습니다.

  • "soft" ulimit세션 또는 프로세스에 적용되는 제한입니다. 모든 프로세스는 "하드" ulimit까지 증가시킬 수 있습니다.

중요

"소프트" ulimit 이 낮으면 연결 수가 너무 많아지면 can't create new thread, closing connection 오류가 발생할 수 있습니다. ulimit 값을 모두 권장 값으로 설정합니다.

ulimit 제한 값을 수정할 때 -H 또는 -S 수정자가 지정되지 않은 경우 '하드(hard)' 및 '소프트(soft)' 값 모두 수정합니다.

대부분의 Linux 배포판에서는 ulimit -a 출력의 가능한 값을 -n 옵션으로 대체하여 값을 변경할 수 있습니다.

ulimit 설정을 변경한 후에는 프로세스를 다시 시작해야 수정된 설정을 이용할 수 있습니다. Linux에서는 /proc 파일 시스템을 사용하여 실행 중인 프로세스의 현재 제한 사항을 확인할 수 있습니다.

시스템 구성 및 기본 설정에 따라 ulimit 사용하여 시스템 제한을 변경하면 시스템을 다시 시작한 후 되돌릴 수 있습니다. 자세한 내용은 배포 및 운영 체제 문서를 확인하십시오.

일반적으로 ulimit 설정을 사용하는 systemctl을 사용하여 mongod 시작해야 합니다.

systemctl start mongod.service

mongod 3}을 사용하여 systemctlsystemd 시작하지 않으면 이 ulimit 설정 중 일부를 재정의합니다. 예를 들어 다음 명령에 표시된 대로 mongod 시작하면 사용자 슬라이스(예시: user-1000.slice) systemd 설정이 사용됩니다.

mongod --config ~/mongod.conf

참고

systemd 0} 사용자 슬라이스는 사용자의 프로세스에 대한 리소스를 제한합니다.

Homebrew 설치 방법을 사용하여 MongoDB Community Edition 설치한 macOS 시스템의 경우 brew services를 통해 MongoDB 시작할 때 열린 파일 제한이 자동으로 설정하다 되지 않을 수 있습니다. ulimit 값을 수동으로 구성해야 할 수도 있습니다.

MongoDB 엔터프라이즈 실행 하거나 TGZ 설치 메서드를 사용하는 macOS 시스템의 경우 ulimit 명령을 사용하여 권장 값을 설정하다 . 실행 시스템에서 시스템 제한을 변경하는 정확한 절차는 운영 체제 설명서를 참조하세요.

Red Hat Enterprise Linux 및 CentOS 6 및 7은 ulimit 설정을 재정의하는 별도의 최대 프로세스 제한인 nproc를 적용합니다. 이 값은 버전에 따라 다음 구성 파일에 정의되어 있습니다.

버전
file

RHEL / CentOS 7

4096

/etc/security/limits.d/20-nproc.conf

RHEL / CentOS 6

1024

/etc/security/limits.d/90-nproc.conf

이러한 버전에 대해 값을 구성하려면 nproc /etc/security/limits.d/99-mongodb-nproc.confsoft nproc 및 값으로 라는 파일 만들어 hard nproc 프로세스 제한을 늘립니다. 권장 값은 권장 ulimit 설정을 참조하세요.

RHEL/CentOS 8에서는 더 이상 별도의 nproc 값이 필요하지 않습니다. 1}ulimit 명령은 RHEL/CentOS 8에서 필요한 최대 프로세스 값을 구성하는 데 충분합니다.

다음 설정은 mongodmongos 배포에 특히 중요합니다.

  • -f (파일 크기): unlimited

  • -t (CPU 시간): unlimited

  • -v (가상 메모리): unlimited [1]

  • -l (고정 메모리 크기): unlimited

  • -n (열린 파일): 64000

  • -m (메모리 크기): unlimited [1] [2]

  • -u (프로세스/스레드): 64000

ulimit 설정을 변경한 후 mongodmongos 인스턴스를 다시 시작하여 변경 사항을 적용합니다.

  • mongod 또는 mongos 인스턴스로 들어오는 연결에는 파일 디스크립터가 2개 필요합니다.

  • macOS 플랫폼의 경우 권장되는 프로세스 제한은 2500이며, 이는 이 플랫폼에 대해 구성 가능한 최대 값입니다.

Upstart를 사용하는 Linux 배포의 경우 또는 인스턴스를 Upstart 서비스로 시작하는 mongos mongod limit 경우 서비스 스크립트내에서 제한을 지정할 수 있습니다. 스탠자를 사용하여 이 작업을 수행할 수 있습니다.

다음 예시 와 같이 권장 설정을 지정합니다.ulimit

limit fsize unlimited unlimited # (file size)
limit cpu unlimited unlimited # (cpu time)
limit as unlimited unlimited # (virtual memory size)
limit memlock unlimited unlimited # (locked-in-memory size)
limit nofile 64000 64000 # (open files)
limit nproc 64000 64000 # (processes/threads)

limit 연은 지정된 첫 번째 값에 "소프트" 제한을, 두 번째 값에 "하드" 제한을 설정합니다.

limit 스탠자를 변경한 후 다음 양식을 사용하여 애플리케이션 서비스를 다시 시작하여 변경 사항이 적용되는지 확인하십시오.

restart <service name>

mongod 또는 mongos 인스턴스를 systemd 서비스로 시작하는 경우 해당 [Service] 서비스 파일의 섹션 내에서 제한을 지정할 수 있습니다. 서비스 파일의 위치는 /etc/systemd/system/<process-name>.service입니다.

리소스 제한 지시문을 사용하여 제한을 설정할 수 있습니다.

다음 예시 와 같이 권장 설정을 지정합니다.ulimit

[Service]
# Other directives omitted
# (file size)
LimitFSIZE=infinity
# (cpu time)
LimitCPU=infinity
# (virtual memory size)
LimitAS=infinity
# (locked-in-memory size)
LimitMEMLOCK=infinity
# (open files)
LimitNOFILE=64000
# (processes/threads)
LimitNPROC=64000

systemd 제한 지침은 "하드" 및 "소프트" 제한을 모두 지정된 값으로 설정합니다.

limit 스탠자를 변경한 후 다음 양식을 사용하여 애플리케이션 서비스를 다시 시작하여 변경 사항이 적용되는지 확인하십시오.

systemctl restart <service name>

참고

yum 또는 apt 과 같은 패키지 관리자를 통해 MongoDB를 설치한 경우 설치의 일부로 설치된 서비스 파일에는 이미 이러한 유한 값이 포함되어 있습니다.

참고

이 섹션은 Linux 운영 체제에만 적용됩니다.

0} 파일 시스템은 에 위치한 파일 시스템 객체에 프로세스별 제한을 /proc /proc/<pid>/limits 저장합니다(여기서 <pid> 는 프로세스의 PID 또는 프로세스 식별자입니다). 다음 bash 함수를 사용하여 지정된 이름의 프로세스 또는 프로세스에 대한 limits 객체의 내용을 반환할 수 있습니다.

return-limits(){
for process in $@; do
process_pids=`ps -C $process -o pid --no-headers | cut -d " " -f 2`
if [ -z $@ ]; then
echo "[no $process running]"
else
for pid in $process_pids; do
echo "[$process #$pid -- limits]"
cat /proc/$pid/limits
done
fi
done
}

이 함수를 복사하여 현재 셸 세션에 붙여넣거나 스크립트의 일부로 로드할 수 있습니다. 다음 호출 중 하나를 사용하여 함수를 호출합니다.

return-limits mongod
return-limits mongos
return-limits mongod mongos
[1](1, 2) MongoDB를 실행하는 시스템에서 가상 또는 상주 메모리 크기를 제한하면 운영 체제는 추가 할당 요청을 거부합니다.
[2] ulimit 에 대한 -m 매개 변수는 커널 버전이 2.4.30보다 최신인 Linux 시스템에는 영향을 주지 않습니다. 원하는 경우 -m 를 생략할 수 있습니다.