본문 바로가기

리눅스

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

반응형

파일 디스크립터(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
728x90

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

 

728x90
반응형