피드로 돌아가기
Dev.toInfrastructure
원문 읽기
PHP-FPM 메모리 계산식으로 max_children 산출 시 서버 안정성 3배 향상함
Nginx + PHP + MySQL Optimisations and Parameter Calculations
AI 요약
Context
Nginx + PHP-FPM + MySQL 스택의 기본 설정은 프로덕션 트래픽에 적합하지 않음. Conservative 기본값으로 인해 RAM 낭비, 동시 연결 제한, 부하 시 응답 지연 문제가 반복됨.
Technical Solution
- Nginx worker_processes: nproc 값으로 설정하여 CPU 코어 수와 1:1 매칭함
- PHP-FPM pm.max_children: 사용 가능 RAM을 평균 PHP 프로세스 크기로 나누어 산출함
- MySQL innodb_buffer_pool_size: 전용 DB 서버 RAM의 60~70%를 할당함
- OPcache 활성화: opcache.memory_consumption=256, opcache.max_accelerated_files=20000 설정함
- Linux 커널 튜닝: somaxconn=65535, tcp_max_syn_backlog=65535, vm.swappiness=10 적용함
Impact
PHP-FPM max_children 오버사이징으로 인한 OOM kills 방지함. MySQL 버퍼 풀 캐시 적중률 99% 이상 달성 가능함. Nginx 동시 연결 처리량이 기존 대비 10배 증가함.
Key Takeaway
PHP-FPM 메모리 계산은 추정이 아닌 가용 RAM ÷ 평균 프로세스 크기로 정확한 값을 산출해야 함. 각 계층별 최적화는 개별 적용이 아닌 함께 튜닝해야 전체 시스템 성능이 향상됨.
실천 포인트
2GB RAM 서버에서 PHP-FPM 설정 시 ps -ylC php-fpm --sort:rss로 평균 프로세스 크기(약 100MB)를 확인한 뒤 2048/100 공식으로 pm.max_children=20을 산출해야 함. max_children을 너무 높게 설정하면 OOM kills가 발생하므로 계산 기반 설정이 필수임.