PHP

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 = dynamic
 
; 프로세스 개수 설정 (dynamic 모드일 때)
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10

; 요청 처리 후 프로세스 재시작 (메모리 누수 방지)
pm.max_requests = 500

🔹 pm(Process Manager) 모드 설명

모드 설명
static 고정된 개수의 프로세스를 생성 (고정된 트래픽에 적합)
dynamic 요청량에 따라 프로세스 개수를 자동 조절 (일반적인 사용)
ondemand 요청이 들어올 때만 프로세스를 생성 (저사양 서버에 적합)

💡 추천 설정

  • 트래픽이 일정한 경우 → pm = static
  • 트래픽이 변동이 큰 경우 → pm = dynamic
  • 리소스가 부족한 경우 → pm = ondemand

2. PHP-FPM의 메모리 관리 (www.conf)

PHP-FPM 프로세스가 메모리를 반환하지 않는 문제를 방지하려면 아래 설정을 추가해야 합니다.

pm.max_requests = 500
pm.process_idle_timeout = 10s

✅ pm.max_requests = 500 → 각 프로세스가 500개 요청을 처리한 후 자동 재시작
✅ pm.process_idle_timeout = 10s → 유휴 상태의 프로세스를 10초 후 종료

이 설정을 통해 메모리 누수를 방지하고 리소스를 효율적으로 활용할 수 있습니다.


3. OPcache 설정 (php.ini)

PHP 코드를 캐싱하여 실행 속도를 빠르게 하는 OPcache를 활성화하려면 php.ini 파일을 수정해야 합니다.

opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
  • 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)

error_log = /var/log/php-fpm/error.log
log_level = notice

💡 로그 레벨 옵션

  • 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이 일정 시간마다 자동으로 재시작되도록 설정할 수도 있습니다.

sudo crontab -e

추가:

0 3 * * * /bin/systemctl restart php-fpm

매일 새벽 3시 PHP-FPM 자동 재시작


7. PHP-FPM 프로세스 상태 확인

현재 실행 중인 PHP-FPM 프로세스를 확인하려면:

ps aux | grep php-fpm

또는 PHP-FPM 풀(pool)별 상태를 확인하려면:

systemctl status php-fpm

더 자세한 상태는:

sudo cat /var/log/php-fpm/error.log

💡 결론

  • pm.max_requests = 500을 설정하여 메모리 누수 방지
  • pm = dynamic으로 프로세스를 자동 관리
  • OPcache 활성화(opcache.enable=1)로 성능 향상
  • slowlog 설정으로 느린 PHP 스크립트 감지
  • 설정 변경 후 sudo systemctl restart php-fpm 실행 필수!

이 설정을 최적화하면 PHP-FPM의 성능과 안정성이 대폭 향상될 것입니다. 🚀

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!