InfluxDB를 사용중에 어느날 데이터를 쓰는 중에 too many open files 에러가 발생하고 있는걸 발견하였다. 여기서 ulimit를 이용하여 서버 설정을 확인 / 변경하고 이것을 영구적으로 설정할 수 있는 방법을 설명한다.
InfluxDB
버전 | Influx OSS 2.4 |
- 사용하는 InfluxDB 의 읽기 / 쓰기 요청 건수이다.
Write | 12,000 건 / 분 |
Query | 900 건 / 분 |
NodeJS로 만든 프로세스에서 InfluxDB로 데이터를 넣는 중에 꽤 자주 아래와 같은 에러가 발생하였다.
unexpected error writing points to database: opening shard previously failed with: [shard 3254] open /mnt/db/influx/engine/data/ce148b0a4b87968c/autogen/3254/index/7/MANIFEST: too many open files
too many open files 에러가 발생하고 있었다.
- too many open files 에러
리눅스에는 프로세스마다 열 수 있는 파일의 갯수 제한이 있다.
too many open files는 이것을 초과했다는 에러이다.
ulimit 명령어로 확인을 해보니 1024로 설정이 되어 있었다.
$ ulimit -a
...
open files (-n) 1024
...
이 값을 바로 수정하려면 아래와 같이 명령어를 입력해주면 된다.
$ ulimit -n 65535
그리고 다시 확인해보면 값이 변경된 걸 알 수 있다.
$ ulimit -a
하지만 시스템이 재부팅되거나 다시 세션을 연결하면 초기화가 된다.
이 값을 영구적으로 변경하기 위해 /etc/security/limits.conf 파일을 수정하여 준다.
/etc/security/limits.conf
아래 2줄을 추가해준다.
* hard nofile 65535
* soft nofile 65536
그러면 재부팅이 되더라도 이 세팅이 유지된다.
결과
- InfluxDB에서 현재 오픈된 파일 갯수 확인
// PID에는 influxdb의 PID 값을 넣는다.
$ lsof -p PID | wc -l
1130
open files 가 1130 이다.
처음에 최대 open files 의 갯수가 1024였는데 부족한 것이었다.
이렇게 수정하여 주니 too many open files 에러가 말끔히 사라졌다.
'개발' 카테고리의 다른 글
Javascript ES6 (ECMAScript 2015) 에서 추가된 기능 정확히 알자 (0) | 2023.03.20 |
---|---|
리눅스 ulimit open files 테스트 (2) | 2023.03.18 |
Nuxt + Express 백엔드 API 서버 통합 (0) | 2023.03.16 |
InfluxDB 쿼리 개선 (0) | 2023.03.13 |
Vue Progressive Framework (0) | 2023.03.11 |
댓글