📚 PHP 고급 - 7주차: 성능 최적화 및 디버깅 - 03 PHP-FPM 설정 최적화

2025. 9. 23. 22:29프로그램/PHP 고급

PHP-FPM 이란?

📚 PHP 고급 - 7주차: 성능 최적화 및 디버깅 - 03 PHP-FPM 설정 최적화

 

#PHP-FPM(FastCGI Process Manager) 은 PHP 웹 애플리케이션의 성능을 향상시키기 위한 #FastCGI 구현체입니다. Apache나 Nginx 같은 #웹_서버 는 자체적으로 PHP 코드를 실행하지 못합니다. 대신, 웹 서버는 PHP-FPM에 요청을 전달하고, PHP-FPM은 이 요청을 처리한 후 결과를 다시 웹 서버로 반환하는 방식으로 동작합니다. PHP-FPM은 여러 개의 #프로세스(Worker Process)를 관리하며, 이 프로세스들이 실제 PHP 요청을 처리합니다. 따라서 PHP-FPM 설정을 최적화하는 것은 #PHP_성능_최적화 의 핵심적인 부분입니다. 🚀


PHP-FPM 주요 설정 항목

PHP-FPM의 성능을 결정하는 주요 설정은 www.conf 파일에 있습니다. 이 파일은 일반적으로 /etc/php/8.1/fpm/pool.d/ 또는 C:\php\php-fpm.conf 와 같은 경로에 위치합니다. 주요 설정 항목들은 다음과 같습니다.

pm (Process Manager)

이 설정은 PHP-FPM이 워커 프로세스를 관리하는 방식을 정의합니다. 세 가지 주요 모드가 있습니다.

  • static: 워커 프로세스 수를 고정합니다. 서버 리소스가 충분하고 트래픽이 예측 가능한 경우에 가장 효율적입니다.
  • ondemand: 요청이 올 때만 워커 프로세스를 생성합니다. 트래픽이 적은 웹사이트에서 메모리를 절약하는 데 유용합니다.
  • dynamic: 요청량에 따라 워커 프로세스 수를 유동적으로 조절합니다. 대부분의 웹사이트에 적합하며, 최대/최소 프로세스 수를 설정할 수 있습니다.
Ini, TOML
 
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15

pm.max_children

dynamic 또는 static 모드에서 생성할 수 있는 #최대_워커_프로세스 수입니다. 이 값은 서버의 #메모리_용량 을 고려하여 신중하게 설정해야 합니다. (pm.max_children * 평균 PHP 프로세스 메모리 사용량) 이 서버의 총 메모리를 초과하지 않도록 해야 합니다.


pm.max_requests

하나의 워커 프로세스가 처리할 수 있는 #최대_요청_수 입니다. 이 요청 수를 초과하면 해당 워커 프로세스는 재활용(재시작)됩니다. 이는 메모리 누수(memory leak)를 방지하는 데 유용합니다. 0으로 설정하면 무한대입니다.

Ini, TOML
 
pm.max_requests = 500

request_terminate_timeout

스크립트가 실행될 수 있는 #최대_시간(초)입니다. 이 시간을 초과하면 PHP-FPM은 해당 스크립트를 강제로 종료하고 경고 로그를 남깁니다. 무한정 실행되는 스크립트로 인해 워커 프로세스가 멈추는 것을 방지합니다.

Ini, TOML
 
request_terminate_timeout = 30

PHP-FPM 설정 최적화 실습

1. pm 모드 선택

  • 저사양 서버/낮은 트래픽: pm = ondemand
  • 일반적인 웹사이트: pm = dynamic
  • 고정된 트래픽의 전용 서버: pm = static

2. pm.max_children 계산

pm.max_children 값을 설정하기 위해 다음 공식을 활용할 수 있습니다.

pm.max_children = (서버 총 메모리 - 시스템 예약 메모리) / PHP 워커 프로세스 평균 메모리

먼저, php.ini의 memory_limit 값을 확인하거나, ps aux --sort -rss 명령어를 통해 실제 PHP-FPM 워커 프로세스의 메모리 사용량을 확인합니다.

3. 설정 변경 및 적용

설정 파일을 수정한 후에는 반드시 PHP-FPM 서비스를 재시작해야 변경 사항이 적용됩니다.

Bash
 
# Ubuntu/Debian
sudo systemctl restart php8.1-fpm

# CentOS/RHEL
sudo systemctl restart php-fpm

마치며

#PHP-FPM_설정_최적화 는 웹 서버와 PHP 애플리케이션 간의 성능을 극대화하는 중요한 작업입니다. 올바른 설정을 통해 서버 리소스를 효율적으로 사용하고, 사용자에게 더 빠르고 안정적인 서비스를 제공할 수 있습니다. 💻

 

 

50만개 IP를 보유! 사용이력 없는 IP제공 간편사용 무료테스트 OK

https://vpn.luzensoft.com

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com