웹서버/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. 성능 최적화 요약
- CPU 코어 수 확인 → worker_processes auto; 설정
- 시스템 최대 연결 수 확인 → worker_connections 값을 ulimit -n과 일치
- PID 파일 위치 필요 시 변경
6. 추가 고려사항
- 버퍼 크기 조정: 대용량 파일 전송 시 client_body_buffer_size, proxy_buffer_size 등 조정
- 타임아웃 설정: keepalive_timeout, client_header_timeout 등 네트워크 지연 최소화
- 캐싱 활용: 정적 파일 캐싱으로 워커 부하 감소
이 설정을 통해 Nginx 서버의 성능을 극대화할 수 있습니다