PHP-FPM 프로세스 static, dynamic, ondemand 모드 차이점
PHP-FPM은 FastCGI 프로토콜을 사용하여 PHP를 실행하는 프로세스 매니저입니다. PHP-FPM은 세 가지 모드로 실행될 수 있습니다.
1. Static 모드
Static 모드에서는 미리 정의된 수의 PHP-FPM 프로세스가 항상 실행되고 요청이 들어올 때마다 이 프로세스를 사용하여 처리합니다. 이 모드에서는 PHP-FPM 프로세스 수를 증가 또는 감소시키지 않으므로 메모리 사용량이 예측 가능합니다. 그러나 불규칙한 트래픽이나 높은 부하 상황에서는 성능이 저하될 수 있습니다.
2. Dynamic 모드
Dynamic 모드에서는 PHP-FPM 프로세스의 수가 요청량에 따라 동적으로 조정됩니다. start_servers와 min_spare_servers, max_spare_servers 등의 설정으로 PHP-FPM 프로세스의 수를 설정하며, 요청이 증가하면 자동으로 더 많은 PHP-FPM 프로세스가 시작됩니다. 이 모드에서는 정확한 메모리 사용량을 예측할 수 없으므로 메모리 사용량을 최적화하는 것이 어려울 수 있습니다. 그러나 가변적인 트래픽 또는 부하 상황에서는 성능이 더욱 향상됩니다.
3. Ondemand 모드
Ondemand 모드에서는 PHP-FPM 프로세스가 시작되지 않습니다. 요청이 들어오면 PHP-FPM는 즉시 해당 요청을 처리하는 데 필요한 프로세스를 시작합니다. 이 모드에서는 PHP-FPM 프로세스의 수를 줄일 수 있으며, 트래픽이 불규칙하게 발생하는 경우 효율적입니다. 그러나 프로세스를 시작하는 데 약간의 지연이 발생할 수 있으며, 동시에 많은 요청이 발생하는 경우 처리 속도가 느려질 수 있습니다.
이러한 세 가지 모드는 서버의 트래픽 패턴, 메모리 및 CPU 사용량, 응답 시간 등에 따라 적절한 모드를 선택해야합니다.
AWS EC2 인스턴스 타입
- https://aws.amazon.com/ko/ec2/instance-types/
인스턴스 | vCPU | 시간당 CPU 크레딧 | 메모리(GiB) | 스토리지 | 네트워크 성능(Gbps) |
t3a.medium | 2 | 24 | 4 | EBS 전용 | 최대 5 |
t3a.medium 인스턴스를 기준으로 PHP-FPM 설정하기
Static 모드
pm = static
pm.max_children = 20
- pm = static: PHP-FPM을 static 모드로 설정합니다. 즉, 미리 정해진 수의 프로세스를 유지합니다.
- pm.max_children = 20: 프로세스의 최대 개수를 20개로 설정합니다. 이 값은 인스턴스의 하드웨어 사양과 PHP 스크립트의 성능 등에 따라 조정이 필요합니다. 예를 들어, PHP 스크립트가 CPU를 많이 사용하는 경우에는 이 값을 낮춰야 할 수도 있습니다.
Dynamic 모드
pm = 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_idle_timeout = 10s
request_terminate_timeout = 120s
request_slowlog_timeout = 30s
- pm = dynamic: PHP-FPM 프로세스 매니저를 dynamic 모드로 설정합니다.
- pm.max_children = 50: PHP-FPM이 생성할 최대 프로세스 수를 50으로 설정합니다.
- pm.start_servers = 5: PHP-FPM이 시작할 때 생성할 프로세스 수를 5으로 설정합니다.
- pm.min_spare_servers = 5: 유휴 상태에서 유지할 최소 프로세스 수를 5로 설정합니다.
- pm.max_spare_servers = 10: 유휴 상태에서 유지할 최대 프로세스 수를 10으로 설정합니다.
- pm.max_requests = 500 : 프로세스가 처리할 수 있는 최대 요청 수입니다. 이 값을 높일수록 메모리 누수에 더 강해집니다.
- pm.process_idle_timeout = 10s: 프로세스가 유휴 상태로 유지되는 최대 시간을 10초로 설정합니다.
- request_terminate_timeout = 120s: 요청이 처리되는 최대 시간을 120초로 설정합니다.
- request_slowlog_timeout = 30s: 느린 요청에 대한 로깅을 활성화하고, 느린 요청의 기준 시간을 30초로 설정합니다.
Ondemand 모드
pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s
request_terminate_timeout = 120s
request_slowlog_timeout = 30s
- pm = ondemand: ondemand 모드로 설정합니다.
- pm.max_children = 50: 프로세스 풀에서 최대로 생성될 수 있는 프로세스 개수를 50개로 설정합니다.
- pm.process_idle_timeout = 10s: 프로세스가 idle 상태일 때, 얼마 동안 유지될 지를 설정합니다.
- request_terminate_timeout = 120s: 요청이 얼마나 오래 실행될 수 있는지를 설정합니다. 이 시간을 초과하면 해당 요청은 강제로 종료됩니다.
- request_slowlog_timeout = 30s: slow request를 설정합니다. 설정된 시간을 초과한 요청은 slowlog 파일에 기록됩니다.
'Linux Distributions' 카테고리의 다른 글
HAProxy 로깅을 설정하고 rsyslog를 사용하여 로그를 원격 서버로 전송하는 방법 (0) | 2024.05.01 |
---|---|
리눅스에서 환경 변수를 등록하고 해제하는 방법 (0) | 2024.04.19 |
CentOS 8에서 Yum Repository 서버를 구축하는 방법 (0) | 2024.04.18 |
우분투에 최신 버전의 Docker를 설치하는 방법 (0) | 2024.04.17 |
CentOS 7에서 HAProxy를 설치하고 설정하는 방법 (0) | 2024.04.17 |