일본 서버에서 WordPress, Laravel, CodeIgniter 등 PHP 기반 서비스를 운영할 때 PHP-FPM(FastCGI Process Manager) 설정이 성능에 큰 영향을 미칩니다. 잘못된 설정은 메모리 낭비나 요청 처리 지연으로 이어집니다. 이 글에서는 서버 스펙에 맞는 PHP-FPM 최적화 방법을 안내합니다.
PHP-FPM이란?
PHP-FPM은 PHP 요청을 처리하는 FastCGI 프로세스 관리자입니다. Nginx에서 PHP 요청이 오면 Unix 소켓 또는 TCP 소켓으로 PHP-FPM에 전달되어 처리됩니다.
주요 설정 파라미터:
- pm: 프로세스 관리 방식 (static, dynamic, ondemand)
- pm.max_children: 최대 PHP 워커 프로세스 수
- pm.start_servers: 시작 시 생성할 프로세스 수
- pm.min_spare_servers: 최소 유휴 프로세스 수
- pm.max_spare_servers: 최대 유휴 프로세스 수
PHP-FPM 설정 파일 위치
# Ubuntu 22.04 기준
/etc/php/8.1/fpm/pool.d/www.conf # 풀 설정
/etc/php/8.1/fpm/php.ini # PHP 설정
/etc/php/8.1/fpm/php-fpm.conf # FPM 전체 설정
스펙별 pm.max_children 계산
pm.max_children을 너무 크게 설정하면 RAM이 부족해지고, 너무 작게 설정하면 요청이 대기합니다.
계산 공식:
pm.max_children = (가용 RAM - OS 사용 RAM) / PHP 워커당 평균 RAM
PHP 워커 하나가 사용하는 평균 RAM은 50~100MB입니다.
| 서버 RAM | OS 사용 | 가용 RAM | 권장 max_children |
|---|---|---|---|
| 2GB | 500MB | 1.5GB | 15~20 |
| 4GB | 800MB | 3.2GB | 30~40 |
| 8GB | 1GB | 7GB | 50~80 |
현재 PHP 워커 RAM 사용량 확인:
ps aux | grep php-fpm | awk '{print $6}' | sort -n | tail -5
PHP-FPM 풀 설정 최적화
; /etc/php/8.1/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm.sock
; 프로세스 관리 방식
; - static: 고정 프로세스 수 (고트래픽에 적합)
; - dynamic: 트래픽에 따라 동적 조절
; - ondemand: 요청이 있을 때만 생성 (저트래픽)
pm = dynamic
; 4GB RAM 서버 기준
pm.max_children = 40
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 15
; 메모리 누수 방지: 일정 요청 처리 후 재시작
pm.max_requests = 500
; 요청 타임아웃
request_terminate_timeout = 60s
; 느린 로그 (2초 이상 소요 요청 기록)
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 2s
; 프로세스 상태 페이지 (Nginx에서 내부적으로만 허용)
pm.status_path = /php-fpm-status
PHP.ini 성능 설정
; /etc/php/8.1/fpm/php.ini
; 메모리 제한
memory_limit = 256M
; 업로드 제한
upload_max_filesize = 50M
post_max_size = 50M
; 실행 시간 제한
max_execution_time = 60
max_input_time = 60
; 에러 표시 (프로덕션에서는 off)
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log
OPcache 활성화 (필수)
OPcache는 PHP 스크립트를 컴파일된 형태로 메모리에 저장해, 매 요청마다 파싱·컴파일하는 오버헤드를 제거합니다. 활성화만으로 PHP 성능이 2~5배 향상됩니다.
; OPcache 설정
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128 ; 메모리 할당 (MB)
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 1 ; 파일 변경 감지 (개발 환경: 1, 프로덕션: 0)
opcache.revalidate_freq = 60 ; 변경 확인 주기 (초)
opcache.fast_shutdown = 1
OPcache 상태 확인:
<?php
$status = opcache_get_status();
echo "Hit rate: " . $status['opcache_statistics']['opcache_hit_rate'] . "%";
PHP-FPM 상태 모니터링
Nginx에서 PHP-FPM 상태 페이지를 내부 접근으로 노출:
location /php-fpm-status {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
curl http://localhost/php-fpm-status
# 출력: pool, process manager, active processes, total requests 등
설정 적용 및 확인
# PHP-FPM 설정 테스트
php-fpm8.1 -t
# 재시작
systemctl restart php8.1-fpm
# 상태 확인
systemctl status php8.1-fpm
마치며
PHP-FPM 최적화는 서버 업그레이드 없이 성능을 크게 향상시킬 수 있는 방법입니다. 특히 OPcache 활성화는 모든 PHP 서비스에서 반드시 해야 하는 설정입니다. 일본 서버 PHP 환경 최적화에 대한 문의는 TCP-80.NET 텔레그램 @tcp80net으로 주세요.