파일 디스크립터(File Descriptor) 및 설정(ulimit)
파일 디스크립터(File Descriptor)와 설정(ulimit)은 Unix 및 Unix 계열 운영 체제에서 중요한 개념입니다. 파일 디스크립터는 파일 또는 I/O 작업을 나타내는 정수 값이며, ulimit은 프로세스에 대한 자원 제한을 설정하는 명령어입니다.
파일 디스크립터란?
- 시스템으로부터 할당받은 파일을 대표하는 0이 아닌 정수값
- 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스
- 흔히 유닉스 시스템에서 모든 것을 파일이라고 한다.
- 일반적인 정규파일(Reglular File)에서부터 디렉토리(Directory), 소켓(Socket), 파이프(PIPE), 블록 디바이스, 캐릭터 디바이스 등등 모든 객체는 파일로써 관리된다.
- 유닉스 시스템에서 프로세스가 이 파일들에 접근할 때 파일 디스크립터(File Descriptor)라는 개념을 이용한다.
- 파일 디스크립터는 '0'이 아닌 정수, 'Non-negative Integer' 값이다. 즉, 음수가 아닌 0과 양수인 정수값을 갖는다. (unsigned int 값이다)
- 프로세스가 실행 중에 파일을 open 하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중에 사용하지 않는 가장 작은 값을 할당해준다.
- 그다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, FD(해당 프로세스의 open file을 관리하는 구조체 배열의 index) 값을 이용해 지정 할 수 있다.
** 그룹 및 와일드카드 제한은 루트에 적용되지 않습니다.
# - NOTE: group and wildcard limits are not applied to root.
# To apply a limit to the root user, <domain> must be the literal username root.
오픈 파일 수와 최대 오픈 파일 수 확인
cat /proc/sys/fs/file-nr
$ cat /proc/sys/fs/file-nr
4160 0 394313
sysctl -n fs.file-nr
$ sysctl -n fs.file-nr
4192 0 394313
sysctl -a | grep file-nr
$ sysctl -a | grep file-nr
fs.file-nr = 4192 0 394313
/proc/sys/fs/file-nr
4160 0 394313
---------------------------------------------------------------
4160 : 사용 중인 File Descriptors 수
0 : 할당된 File Descriptors의 수
394313 : 최대 열린 File Descriptors의 수
리눅스 시스템에서 최대 Open File 개수 확인
cat /proc/sys/fs/file-max
$ cat /proc/sys/fs/file-max
394313
sysctl -n fs.file-max
$ sysctl -n fs.file-max
394313
sysctl -a | grep fs.file-max
$ sysctl -a | grep fs.file-max
fs.file-max = 394313
ulimit 설정
열린 File Descriptors의 최대 수(nofile) 설정
최대값 : /proc/sys/fs/file-nr 수치보다 작게 설정
- ulimit 명령어는 프로세스에 대한 자원 제한을 설정하거나 조회하는 데 사용됩니다. 이러한 자원 제한은 프로세스의 동작에 영향을 미칩니다.
- 자주 사용되는 ulimit 옵션
- -c: 코어 파일 크기 제한 (코어 덤프 파일)
- -n: 열린 파일 디스크립터 수 제한
- -u: 사용자 프로세스 수 제한
확인
- soft 설정 확인
ulimit -a -S | grep "open files"
$ ulimit -aS | grep "open files"
open files (-n) 65535
- hard 설정 확인
ulimit -a -H | grep "open files"
$ ulimit -aH | grep "open files"
open files (-n) 65535
적용
- 임시 적용
ulimit -n 65535
- permanent(영구) 적용
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
최대 프로세스 수(nproc) 설정
최대값 : unlimited
확인
- soft 설정 확인
ulimit -a -S | grep "max user processes"
$ ulimit -aS | grep "max user processes"
max user processes (-u) unlimited
- hard 설정 확인
ulimit -a -H | grep "max user processes"
$ ulimit -aH | grep "max user processes"
max user processes (-u) unlimited
적용
- 임시 적용
ulimit -u 65535
- permanent(영구) 적용
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
파일 디스크립터와 ulimit 설정은 시스템 자원 관리와 프로세스 제어에 중요한 역할을 합니다. 특히 대규모 서버 애플리케이션에서는 열린 파일 디스크립터 수 제한을 조절하여 동시 접속 및 파일 처리를 관리하는 데 사용됩니다. 사용 중인 운영 체제에 따라 구체적인 명령어 및 설정 방법이 다를 수 있으므로 관련 문서를 참조하거나 man 명령어로 매뉴얼 페이지를 확인하는 것이 좋습니다.
참고URL
- lsof(list open file) 명령어 : https://scbyun.com/447
- UNIX 및 Linux 운영 체제에서 ulimit 값 설정 : https://www.ibm.com/docs/ko/cognos-analytics/11.0.0?topic=settings-set-ulimit-values-unix-linux-operating-systems
- How to set ulimit values : https://access.redhat.com/solutions/61334
'리눅스' 카테고리의 다른 글
도커 컴포즈 설치(docker-compose install) (0) | 2021.06.10 |
---|---|
chage 명령어 (0) | 2021.06.09 |
GitLab Omnibus를 Docker 컨테이너로 올리는 방법 (0) | 2021.06.08 |
GitLab Omnibus 백업 및 복원하는 방법 (0) | 2021.06.08 |
OpenLDAP과 phpLDAPadmin을 Docker 컨테이너로 실행하는 방법 (0) | 2021.06.07 |