PHP-FPM(FastCGI Process Manager)
PHP-FPM(FastCGI Process Manager) 개요
PHP-FPM(FastCGI Process Manager)은 PHP 스크립트를 실행하는 고성능 FastCGI 프로세스 관리자입니다.
웹 서버(Apache, Nginx)와 PHP 실행 환경 사이에서 동작하며, 특히 높은 트래픽을 처리하는 사이트에서 성능을 최적화할 수 있도록 설계되었습니다.
✅ PHP-FPM의 주요 기능
- 동적 프로세스 관리 → 요청량에 따라 PHP 실행 프로세스 개수를 자동 조절
- 메모리 누수 방지 → 일정 요청 수 처리 후 프로세스를 자동으로 재시작
- 비동기 로깅 → 로그 기록이 PHP 실행 성능에 영향을 주지 않음
- OPcache 지원 → PHP 코드 캐싱으로 성능 향상
- chroot 및 setuid 지원 → 보안 강화를 위한 격리 실행
PHP-FPM 설정 파일 위치
PHP-FPM 설정 파일은 여러 개의 파일로 나뉘어 있습니다.
📂 주요 설정 파일
파일 | 경로 | 설명 |
---|---|---|
php-fpm.conf | /etc/php/8.2/fpm/php-fpm.conf |
PHP-FPM의 전체적인 설정 |
www.conf | /etc/php/8.2/fpm/pool.d/www.conf |
PHP-FPM 프로세스 풀(pool) 설정 |
php.ini | /etc/php/8.2/fpm/php.ini |
PHP 기본 설정 (메모리, 실행 시간 등) |
AWS Linux (Amazon Linux 2, Amazon Linux 2023)에서는 /etc/php-fpm.d/www.conf
가 기본 설정 파일입니다.
1. PHP-FPM 프로세스 관리 설정 (www.conf)
웹 서버가 PHP 요청을 보낼 때, PHP-FPM이 어떤 방식으로 프로세스를 관리할지 설정할 수 있습니다.
🔹 pm(Process Manager) 모드 설명
모드 | 설명 |
---|---|
static | 고정된 개수의 프로세스를 생성 (고정된 트래픽에 적합) |
dynamic | 요청량에 따라 프로세스 개수를 자동 조절 (일반적인 사용) |
ondemand | 요청이 들어올 때만 프로세스를 생성 (저사양 서버에 적합) |
💡 추천 설정
- 트래픽이 일정한 경우 → pm = static
- 트래픽이 변동이 큰 경우 → pm = dynamic
- 리소스가 부족한 경우 → pm = ondemand
2. PHP-FPM의 메모리 관리 (www.conf)
PHP-FPM 프로세스가 메모리를 반환하지 않는 문제를 방지하려면 아래 설정을 추가해야 합니다.
✅ pm.max_requests = 500 → 각 프로세스가 500개 요청을 처리한 후 자동 재시작
✅ pm.process_idle_timeout = 10s → 유휴 상태의 프로세스를 10초 후 종료
이 설정을 통해 메모리 누수를 방지하고 리소스를 효율적으로 활용할 수 있습니다.
3. OPcache 설정 (php.ini)
PHP 코드를 캐싱하여 실행 속도를 빠르게 하는 OPcache를 활성화하려면 php.ini
파일을 수정해야 합니다.
- opcache.memory_consumption=256 → OPcache에 256MB 메모리 할당
- opcache.revalidate_freq=60 → 60초마다 PHP 파일 변경 여부 확인
OPcache를 사용하면 PHP 실행 속도가 최대 3배까지 증가할 수 있습니다.
4. PHP-FPM 로그 설정 (php-fpm.conf & www.conf)
PHP-FPM의 오류 로그를 확인하려면 로그 경로를 설정해야 합니다.
PHP-FPM 메인 로그 설정 (php-fpm.conf)
💡 로그 레벨 옵션
alert
→ 치명적인 오류만 기록error
→ 일반적인 오류 기록warning
→ 경고 메시지 포함notice
→ 기본값 (일반적인 로그 기록)debug
→ 상세한 디버그 정보 포함
PHP-FPM 개별 풀 로그 설정( www.conf )
access.log = /var/log/php-fpm/www-access.log slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 5s
✅ slowlog
→ 실행 시간이 5초 이상 걸리는 PHP 스크립트 로깅
✅ access.log
→ PHP 요청 로그 저장
설정 후 로그 확인:
tail -f /var/log/php-fpm/error.log
5. PHP-FPM 설정 적용 및 재시작
설정을 변경한 후에는 PHP-FPM을 재시작해야 합니다.
sudo systemctl restart php-fpm
적용 여부 확인:
sudo systemctl status php-fpm
6. 자동으로 PHP-FPM 재시작 설정 (크론 작업)
PHP-FPM이 일정 시간마다 자동으로 재시작되도록 설정할 수도 있습니다.
추가:
7. PHP-FPM 프로세스 상태 확인
현재 실행 중인 PHP-FPM 프로세스를 확인하려면:
- pm.max_requests = 500을 설정하여 메모리 누수 방지
- pm = dynamic으로 프로세스를 자동 관리
- OPcache 활성화(opcache.enable=1)로 성능 향상
- slowlog 설정으로 느린 PHP 스크립트 감지
- 설정 변경 후 sudo systemctl restart php-fpm 실행 필수!
이 설정을 최적화하면 PHP-FPM의 성능과 안정성이 대폭 향상될 것입니다. 🚀