mongodb Too many open files 에러

몽고디비 사용중 아래와 같은 에러가 발생했습니다. 

STORAGE  [conn3] WiredTiger error (24) [1643430070:575724][2847:0x700001aad000], file:index-120--942093529947500226.wt, WT_SESSION.open_cursor: __posix_open_file, 665: /Volumes/Data/data/db/index-120--942093529947500226.wt: handle-open: open: Too many open files Raw: [1643430070:575724][2847:0x700001aad000], file:index-120--942093529947500226.wt, WT_SESSION.open_cursor: __posix_open_file, 665: /Volumes/Data/data/db/index-120--942093529947500226.wt: handle-open: open: Too many open files
STORAGE  [conn3] Failed to open a WiredTiger cursor. Reason: TooManyFilesOpen: 24: Too many open files, uri: table:index-120--942093529947500226, config: overwrite=false
STORAGE  [conn3] This may be due to data corruption. Please read the documentation for starting MongoDB with --repair here: http://dochub.mongodb.org/core/repair
-        [conn3] Fatal Assertion 50882 at src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp 101
-        [conn3] \n\n***aborting after fassert() failure\n\n

개발환경은 MacOS 몬테레이, python 3.8.6 mongodb 4.2.12 였고 업비트 KRW 모든 마켓 일봉 캔들을 가져오던 중에 발생했습니다.

몽고디비 공식 사이트 설명에 따르면 리눅스나 macOS같은 UNIX계열 os에서는 프로세스나 사용자별로 스레드, 파일, 네트워크 연결등의 시스템 리소스의 사용에 제한을 하고 있다고 합니다. 업비트에서 모든 마켓 일봉의 많은 데이터를 몽고에 접근하려다 이 제한에 걸려 에러가 발생한 것이죠. 아마 맥에 몽고디비를 brew로 설치하신분들은 에러가 발생하지 않을 듯 싶네요. 저는 압축파일로 수동 설치해서 발생했던 이슈입니다.

그동안 몽고디비 실행이 잘되서 몰랐는데 mongod.log 파일에도 아래와 같이 경고가 있었네요

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

해결하려면 ulimit라는 명령으로 제한 상한을 올려줘야합니다. 먼저 현재 상태를 확인하기 위해 터미널에서 ulimit -a 를 입력하면 아래와 비슷하게 나옵니다.

파일 제한이 256이네요. 이것을 수정하면 됩니다. 수정하기 전에 몽고디비 사이트에서 추천하는 세팅값은 아래와 같네요.


터미널에서 ulimit -n 64000 입력 후 다시 확인해보면 적용이 잘 된것을 확인 가능합니다.

이제 다시 몽고디비 서버를 실행하고 작업을 해보니 잘 되네요.

하지만 이것은 임시로 적용된 상태입니다. 터미널 세션을 새로 만들거나 맥 재부팅을 하면 다시 원래값으로 돌아가게 됩니다. 따라서 재부팅시에 자동으로 limit max file을 적용되게 하려면 launchctl로 관리해줘야 합니다. 따로 정리한 링크대로 적용하면 아래와 같이 부팅 후에도 잘 적용 된 것이 확인됩니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.