2025. 9. 23. 22:29ㆍ프로그램/PHP 고급
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: 요청량에 따라 워커 프로세스 수를 유동적으로 조절합니다. 대부분의 웹사이트에 적합하며, 최대/최소 프로세스 수를 설정할 수 있습니다.
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으로 설정하면 무한대입니다.
pm.max_requests = 500
request_terminate_timeout
스크립트가 실행될 수 있는 #최대_시간(초)입니다. 이 시간을 초과하면 PHP-FPM은 해당 스크립트를 강제로 종료하고 경고 로그를 남깁니다. 무한정 실행되는 스크립트로 인해 워커 프로세스가 멈추는 것을 방지합니다.
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 서비스를 재시작해야 변경 사항이 적용됩니다.
# Ubuntu/Debian
sudo systemctl restart php8.1-fpm
# CentOS/RHEL
sudo systemctl restart php-fpm
마치며
#PHP-FPM_설정_최적화 는 웹 서버와 PHP 애플리케이션 간의 성능을 극대화하는 중요한 작업입니다. 올바른 설정을 통해 서버 리소스를 효율적으로 사용하고, 사용자에게 더 빠르고 안정적인 서비스를 제공할 수 있습니다. 💻
50만개 IP를 보유! 사용이력 없는 IP제공 간편사용 무료테스트 OK
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
'프로그램 > PHP 고급' 카테고리의 다른 글
| 📚 PHP 고급 - 8주차: 배포 및 운영 기초 (Linux 서버) - 01 Linux 서버 환경 이해 (Ubuntu/CentOS) (0) | 2025.09.26 |
|---|---|
| 📚 PHP 고급 - 7주차: 성능 최적화 및 디버깅 - 04 로그 관리 및 모니터링 (0) | 2025.09.25 |
| 📚 PHP 고급 - 7주차: 성능 최적화 및 디버깅 - 02 코드 프로파일링 (Xdebug) (0) | 2025.09.22 |
| 📚 PHP 고급 - 7주차: 성능 최적화 및 디버깅 - 01 DB 쿼리 최적화 (인덱스 활용) (0) | 2025.09.21 |
| 📚 PHP 고급 - 6주차: 캐싱 (Caching) 전략 - 03 Redis/Memcached 연동 (0) | 2025.09.14 |