PHP-FPM 설정 튜닝으로 워드프레스 속도 개선이 필요했던 건 병원 예약 페이지에 홍보 이메일이 나간 후 갑자기 접속이 몰리면서 502 Bad Gateway 에러가 쏟아졌을 때입니다. Nginx 로그를 보니 connect() to unix:/run/php/php8.1-fpm.sock failed였습니다. PHP-FPM의 pm.max_children이 너무 낮아서 요청이 쌓인 것이었습니다.
# PHP-FPM 상태 페이지 활성화 후 확인
# /etc/php/8.1/fpm/pool.d/www.conf 에 추가:
# pm.status_path = /php-fpm-status
# 실시간 상태 확인
curl http://127.0.0.1/php-fpm-status
# 프로세스 수 확인
ps aux | grep php-fpm | wc -l
# 현재 설정 확인
cat /etc/php/8.1/fpm/pool.d/www.conf | grep "^pm"
# PHP 프로세스 1개당 평균 메모리 사용량 확인
ps --no-headers -o "rss,cmd" -C php-fpm8.1 | awk '{ sum+=$1 } END { printf "%.0f MB\n", sum/NR/1024 }'
# 서버 가용 메모리 확인 (전체 - OS/DB 사용분)
free -m
계산식: pm.max_children = (가용 메모리 MB) / (PHP 1개 평균 MB)
예: 가용 메모리 800MB, PHP 1개 평균 50MB → max_children = 16
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
; 동적 프로세스 관리 (추천)
pm = dynamic
; 최대 PHP 프로세스 수 (메모리 기준으로 계산)
pm.max_children = 20
; 상시 유지할 프로세스 수
pm.start_servers = 4
; 유휴 상태 최소 유지 수
pm.min_spare_servers = 2
; 유휴 상태 최대 유지 수
pm.max_spare_servers = 6
; 프로세스당 최대 요청 처리 후 재시작 (메모리 누수 방지)
pm.max_requests = 500
적용:
sudo systemctl reload php8.1-fpm
PHP-FPM 튜닝은 서버 메모리에 맞게 수치를 조정하는 것이 핵심입니다. pm.max_children을 너무 높게 잡으면 메모리가 부족해져 오히려 느려지므로, 서버 메모리 기준으로 계산한 값을 사용해야 합니다.
의료기관 인프라 운영 현장 경험을 바탕으로 작성하며, WavePix 운영자 (의료기관 3곳 인프라 전담)가 최종 검수합니다.
작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)