본문 바로가기
Linux

서비스가 사용하는 File Handler의 이해

by 간장공장공차장 2024. 11. 20.
반응형

리눅스에서 파일이란?

리눅스에서 파일은 데이터나 정보를 저장하는 기본적인 단위이며, 모든 리눅스 시스템에서 파일은 일반 파일뿐만 아니라, 디렉터리, 링크, 장치 파일, 소켓 등 다양한 형태로 존재한다. 리눅스는 "모든 것이 파일이다"라는 철학을 따르며, 이를 통해 파일뿐 아니라, 장치나 프로세스 간 통신 채널 역시 파일로 취급한다.

리눅스에서 파일의 종류는 다음과 같다.

  1. Regular file : 텍스트 파일, 바이너리 파일, 실행 파일 등 데이터를 담고 있는 일반적인 파일
  2. Directory : 파일과 다른 디렉터리들을 조직화하고 계층 구조로 관리하는 폴더 역할을 합니다.
  3. Link file : 특정 파일을 참조하는 파일입니다.
    • 심볼릭 링크 (Symbolic link): 원본 파일의 경로를 가리키며, 원본 파일이 삭제되면 링크가 깨진다.
    • 하드 링크 (Hard link): 원본 파일의 데이터 블록을 공유하는 링크로, 원본 파일이 삭제되어도 동일한 데이터를 유지한다.
  4. Device file : 하드웨어 장치를 추상화하여 파일 형태로 접근할 수 있게 해주는 파일이다.
    • 블록 장치 파일: 디스크와 같은 장치에 사용됩니다.
    • 문자 장치 파일: 터미널이나 키보드 등과 같은 장치에 사용됩니다.
  5. Socket file : 프로세스 간 통신(IPC)을 위해 사용되는 파일입니다. 네트워크 통신 또는 로컬 프로세스 간 통신을 처리할 수 있다.
  6. Named pipe : 프로세스 간 일방향 통신을 가능하게 하는 특별한 파일이다.

파일 핸들러

  • 파일 핸들러는 프로세스가 열린 파일을 참조하는 데이터 구조입니다. 각 파일 핸들러는 파일의 상태와 위치 정보를 저장하며, 프로세스는 이를 통해 파일에 접근하고 작업을 수행한다.
  • Linux 시스템에서 각 프로세스는 동시에 열 수 있는 파일의 수에 제한이 있으며, 이를 nofile이라고 합니다. 이 제한은 시스템의 안정성 및 성능에 큰 영향을 미친다.

Nofile의 기본값 및 중요성

  • Nofile의 기본값은 일반적으로 1024로 설정되어 있으며, 이는 프로세스가 동시에 열 수 있는 파일의 최대 개수를 나타낸다.
  • tyk gateway와 같은 높은 트래픽을 처리하거나 많은 파일을 여는 애플리케이션에서는 이 제한이 문제가 될 수 있다. 따라서 애플리케이션의 요구 사항에 따라 이 값을 조정해야 한다.

파일 핸들러 수 조정

  • 파일 핸들러 수(nofile)는 ulimit 및 prlimit 명령어를 사용하여 조정할 수 있습니다.
    • ulimit 예시:
    • ulimit -n 2048 # 열린 파일 수를 2048로 설정, 해당 세션에서만 사용 가능
    • prlimit 예시:
    • prlimit --nofile=4096 <pid> # 프로세스의 열린 파일 수를 4096으로 설정

Systemd를 통한 관리

  • systemd는 현대적인 init 시스템으로 서비스와 프로세스를 관리합니다. systemd는 각 서비스 단위에 대해 리소스 제한을 설정할 수 있는 기능을 제공한다.
  • systemd 서비스 설정 예시:
    • 서비스 단위 파일(/etc/systemd/system/tyk-gateway.service)에서 LimitNOFILE을 설정하여 열린 파일 수를 제한할 수 있다.
    • 이 파일은 systemctl edit tyk-gateway 를 수행하면 바로 편집이 가능하다.아래 내용을 설정하게 되면 /etc/systemd/system/tyk-gateway.service.d 하단 파일에 override.conf 파일로 LimitNOFILE 의 값이 들어가게 된다.
    • [Service] LimitNOFILE=4096 # 열린 파일 수를 4096으로 설정
  • 서비스 설정 후 변경 사항을 적용하려면 다음과 같이 프로세스 재기동이 필요하다.
  • systemctl restart tyk-gateway

Tyk Gateway의 예시

Tyk Gateway와 같은 애플리케이션에서 파일 핸들러 수(nofile)가 어떻게 설정되고 어떤 우선 순위에 따라 적용되는지 확인해본다.

Tyk 파일핸들러 설정의 중요성

Tyk Gateway는 APIgateway로, API 요청을 처리하고 인증, 권한 부여, 속도 제한, 로깅 등을 담당한다. 대규모 트래픽을 처리하는 APIgateway에서는 다양한 파일과 시스템 리소스에 접근하여 이러한 작업을 수행 많은 NOFILE 개수가 필요하다.

Tyk Gateway가 열 수 있는 파일 및 리소스 예시

  1. Regular file : Tyk Gateway의 tyk.conf 는 일반 파일로, Gateway의 동작 방식을 설정한다. Tyk Gateway는 이를 읽어 각 API의 설정을 로드한다. 로그파일도 일반 파일의 일종으로, Tyk Gateway는 로그 파일에 요청 처리 기록, 오류, 성능 데이터를 기록하여 분석이나 디버깅에 사용할 수 있도록 한다.
  2. Directory : Tyk Gateway는 API 정의나 설정 파일이 위치한 특정 디렉터리를 열어서 설정 파일을 읽어들입니다. 예를 들어, /opt/tyk-gateway/와 같은 디렉터리를 열어 그 안의 여러 설정 파일을 불러올 수 있다.
  3. Socket file : Tyk Gateway는 TCP 소켓 또는 유닉스 도메인 소켓을 통해 외부 서비스와 통신한다.
    • Redis 또는 MongoDB와 통신할 때 TCP 소켓을 열어 데이터베이스와 연결한다. Redis는 캐싱과 속도 제한 데이터 저장에 사용되고, MongoDB는 API definition, 사용자 데이터 등을 저장하는 데 사용된다.
    • 외부 API와의 통신, 또는 HTTP 클라이언트가 요청을 보내는 경우도 소켓을 사용하여 데이터를 주고받는다. target으로 전달할 때 target이 domain으로 등록된 경우 nslookup 하는 경우도 모두 소켓파일을 읽으며 동작한다.
  4. FIFO 파일 (Named pipe)
    • 일반적으로 Tyk Gateway가 직접 FIFO 파일을 열어 사용하는 경우는 드물지만, 시스템 설정에 따라 특정 데이터 전달 방식으로 FIFO를 사용해 로깅이나 데이터를 주고받는 구성을 할 수 있습니다.

이처럼 Tyk Gateway 와 같은 프로세스의 경우 파일핸들러 설정이 필수적이다.

  • 설정 파일

Tyk Gateway는 다음과 같은 여러 설정 파일에서 파일 핸들러 수를 정의할 수 있다.

  1. /etc/security/limits.conf
    • 사용자의 소프트 및 하드 한계를 설정한다.
    • root soft nofile 1000000 root hard nofile 1000000
  2. systemd 서비스 파일
    • Tyk Gateway를 systemd로 실행하는 경우, 서비스 단위 파일에서 설정할 수 있다.
    • [Service] LimitNOFILE=80000 # 열린 파일 수를 80000로 설정

우선 순위 적용확인

파일 핸들러 수에 대한 설정은 다음과 같은 우선 순위로 적용된다

  1. systemd 서비스 설정: 서비스 파일에서 설정한 LimitNOFILE이 가장 높은 우선 순위를 가집니다. 예를 들어, LimitNOFILE=80000로 설정된 경우 이 값이 적용된다.
  2. /etc/security/limits.conf: 사용자의 소프트 및 하드 한계가 이 단계에서 적용된다. 예를 들어, root user의 soft nofile 2048가 적용되면 기본적으로 2048로 설정됩니다.
  3. ulimit 명령어: 사용자가 셸에서 ulimit -n 명령어를 통해 설정한 값이 적용됩니다. 예를 들어, ulimit -n 2048로 설정했다면, 소프트 한계로 2048이 적용된다.

최종 파일 핸들러 수

Tyk Gateway가 사용할 수 있는 최종 파일 핸들러 수는 다음과 같이 결정됩니다:

  • 최종값:
    • 만약 systemd 서비스에서 LimitNOFILE이 80000로 설정되어 있다면, 이 값이 가장 높은 우선 순위로 적용됩니다. 즉, Tyk Gateway는 최대 80000개의 파일 핸들러를 사용할 수 있습니다.
    • 만약 사용자가 ulimit를 통해 hard limit을 2048로 설정했다면, 이는 시스템이 systemd 설정을 무시하고 2048로 제한할 수 있습니다.

이러한 설정은 서버의 요구 사항에 따라 적절히 조정해야 하며, 특히 높은 트래픽을 처리하는 애플리케이션에서는 LimitNOFILE 값을 높이는 것이 중요하다.

반응형

'Linux' 카테고리의 다른 글

리눅스 파일 디렉토리 구조  (0) 2024.11.21
쉘 스크립트  (0) 2021.12.22
기초 명령어  (0) 2021.12.21