본문 바로가기

리눅스

[리눅스] 파일 디스크립터(File Descriptor) 및 설정(ulimit)

728x90

파일 디스크립터(File Descriptor) 및 설정(ulimit)

파일 디스크립터란?
- 시스템으로부터 할당받은 파일을 대표하는 0이 아닌 정수값
- 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스
흔히 유닉스 시스템에서 모든 것을 파일이라고 한다.
- 일반적인 정규파일(Reglular File)에서부터 디렉토리(Directory), 소켓(Socket), 파이프(PIPE), 블록 디바이스, 캐릭터 디바이스 등등 모든 객체는 파일로써 관리된다.
- 유닉스 시스템에서 프로세스가 이 파일들에 접근할 때 파일 디스크립터(File Descriptor)라는 개념을 이용한다.
- 파일 디스크립터는 '0'이 아닌 정수, 'Non-negative Integer' 값이다. 즉, 음수가 아닌 0과 양수인 정수값을 갖는다. (unsigned int 값이다)
- 프로세스가 실행 중에 파일을 open 하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중에 사용하지 않는 가장 작은 값을 할당해준다.
- 그다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, FD(해당 프로세스의 open file을 관리하는 구조체 배열의 index) 값을 이용해 지정 할 수 있다.

오픈 파일 수와 최대 오픈 파일 수 확인

$ cat /proc/sys/fs/file-nr 
4160    0       394313
$ sysctl -n fs.file-nr
4192    0       394313
$ 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
394313
$ sysctl -n fs.file-max 
394313
$ sysctl -a | grep fs.file-max
fs.file-max = 394313

ulimit 설정

열린 File Descriptors의 최대 수(nofile) 설정

 최대값 : /proc/sys/fs/file-nr 수치보다 작게 설정

확인

- 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

 

참고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

 

728x90