웹서버/nginx

Nginx 프로세스 구조

janggos 2025. 3. 16. 13:20

1. 마스터 프로세스(Master Process)

  • 역할: Nginx 서비스의 메인 프로세스로, 설정 파일을 읽고 워커 프로세스를 관리합니다.
  • 특징: 직접 요청을 처리하지 않으며, 워커 프로세스를 생성/관리합니다.
  • 명령어로 확인:
    systemctl status nginx  # 서비스 상태 확인
    ps aux | grep nginx     # 프로세스 목록 확인

2. 워커 프로세스(Worker Process)

  • 역할: 실제 클라이언트 요청을 처리합니다.
  • 기본값: 1개의 워커 프로세스로 시작합니다.
  • 비동기 처리: 단일 워커 프로세스가 비동기 방식으로 다중 요청을 효율적으로 처리합니다.

2. 워커 프로세스 최적화

1. CPU 코어 수 확인

Nginx 성능을 극대화하려면 워커 프로세스 수 = CPU 코어 수로 설정해야 합니다.

  • CPU 코어 수 확인 방법:
    nproc        # 간단히 코어 수 확인 (예: 4)
    lscpu | grep "CPU(s):"  # 상세 정보 확인

2. worker_processes 설정

  • 기본값: worker_processes 1;
  • 권장값: CPU 코어 수 또는 auto로 설정 (Nginx가 자동 감지)
    # /etc/nginx/nginx.conf
    worker_processes auto;  # CPU 코어 수에 맞춰 워커 생성

3. 잘못된 설정의 위험성

  • 과도한 워커 프로세스: CPU 코어보다 많은 워커를 생성하면 컨텍스트 스위칭 오버헤드 발생 → 성능 저하
  • 예시: 1코어 서버에 worker_processes 2; → 각 워커가 50%만 활용

3. 동시 연결 수 최적화 (worker_connections)

1. worker_connections

  • 의미: 단일 워커 프로세스가 동시에 처리할 수 있는 최대 연결 수
  • 시스템 제한 확인:
    ulimit -n  # 최대 오픈 파일 수 (예: 1024)

2. 최대 동시 연결 수 계산

  • 공식: 최대 동시 연결 = worker_processes × worker_connections
  • 예시: 4코어 서버 + worker_connections 1024  4 × 1024 = 4096 연결

3. 설정 방법

# /etc/nginx/nginx.conf
events {
    worker_connections 1024;  # 시스템의 ulimit -n 값과 일치
}

4. PID 파일 위치 변경 (pid)

  • 기본값: /run/nginx.pid
  • 사용자 정의 위치 설정:
    # /etc/nginx/nginx.conf
    pid /var/run/new_nginx.pid;  # PID 파일 경로 변경
  • 변경 후 적용:
    sudo systemctl reload nginx
    ls -l /var/run/new_nginx.pid  # 새로운 PID 파일 확인

5. 성능 최적화 요약

  1. CPU 코어 수 확인  worker_processes auto; 설정
  2. 시스템 최대 연결 수 확인  worker_connections 값을 ulimit -n과 일치
  3. PID 파일 위치 필요 시 변경

6. 추가 고려사항

  • 버퍼 크기 조정: 대용량 파일 전송 시 client_body_buffer_size, proxy_buffer_size 등 조정
  • 타임아웃 설정: keepalive_timeout, client_header_timeout 등 네트워크 지연 최소화
  • 캐싱 활용: 정적 파일 캐싱으로 워커 부하 감소

이 설정을 통해 Nginx 서버의 성능을 극대화할 수 있습니다