node.js와 함께하는 대표적 NoSQL DB 가운데 하나인 MongoDB를 설치해서 이것저것 실험해보고 있는데, 우연하게 mongodb.log 파일을 열어보니 DB를 실행할 때마다 다음과 같은 경고문을 찍어내고 있었다.

** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

알아보니, mongod가 적절하게 운용되려면 시스템 자원의 운용과 관련해서 리소스 한계치 설정 값(ulimit settings)을 권장치 만큼 지정해 줄 것을 장려하고 있다.

경고 문구에 찍힌 현 Mac 시스템의 Number of files 값은 터미널에서 ulimit -a 혹은 launchctl limit 명령을 주면 확인할 수 있는데, 기본 설정 값이 명령에 따라 각기 open filesmaxfiles라는 이름으로 표시되며 그 값은 256으로 정해져 있다. (관련 문서 – Where are the default ulimits specified on OS X (10.5)?)

테스트 목적으로 MongoDB를 운용한다면 별 신경을 안 써도 되겠지만, 대용량 DB를 다루면서 빠른 응답속도가 요구되는 production 환경에선 이 시스템 자원의 운용에 관한 설정이 무척 중요해질 것이다.

이 리소스 한계치 값을 조절하려면 /etc/launchd.conf 파일을 수정해도 되지만, 여기에 설정된 값은 시스템의 모든 프로세스에 적용되면서 자원 낭비의 소지가 있다. 그래서 특정 프로세스에만 리소스 한계치 값을 지정해 주려면 해당 서비스의 launchd plist 파일에 따로 지정해서 적용해줄 수 있다. 시스템을 재시동할 때마다 mongod daemon을 자동 실행시켜주는 launchd의 plist 파일에다 다음과 같이 SoftResourceLimits 항목에 NumberOfFilesNumberOfProcesses 값을 지정해 준다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>org.mongodb.mongod</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/mongodb/bin/mongod</string>
    <string>run</string>
    <string>--config</string>
    <string>/usr/local/mongodb/mongod.conf</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local/mongodb</string>
  <key>StandardErrorPath</key>
  <string>/var/log/mongodb/output.log</string>
  <key>StandardOutPath</key>
  <string>/var/log/mongodb/output.log</string>
  <key>SoftResourceLimits</key>
  <dict>
    <key>NumberOfFiles</key>
    <integer>1024</integer>
    <key>NumberOfProcesses</key>
    <integer>512</integer>
  </dict>
</dict>
</plist>

여기서 NumberOfProcesses 값은 NumberOfFiles 값의 딱 반만 지정해주면 된단다.

추가 참고 문서:

관련된 주제의 글

“MongoDB의 Number of files 관련 경고 메시지를 없애는 법”에 달린 2개의 댓글

댓글을 남겨 주세요