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을 너무 높게 잡으면 메모리가 부족해져 오히려 느려지므로, 서버 메모리 기준으로 계산한 값을 사용해야 합니다.
AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.
작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)