세 가지 작동 모드
주문형, 정적, 동적(메모리 우선 순위, 정적 풀, 서비스 우선 순위)
주문형
php-fpm이 시작되면 작업자 프로세스는 시작되지 않고 작업자는 요청 시 시작되며 링크가 들어온 후에만 시작됩니다.
listen = 127.0.0.1:9001
pm = ondemand
pm.process_idle_timeout = 60
pm.max_children = 10
연결이 되면(링크만 생성되고 데이터 없이는 텔넷도 생성됨) 새 작업자 프로세스를 생성하고 작업자 프로세스 수는 max_children 설정에 의해 제한되며 전역 프로세스에 의해 제한됩니다. 최대 설정(세 가지 모드 모두 이것으로 제한됨, 아래에 설명된 전역 구성 항목이 있음) 유휴 시간이 process_idle_timeout 설정을 초과하면 작업자 프로세스가 파괴됩니다.
- 장점: 트래픽 수요에 따라 생성, 시스템 리소스 낭비 없음,
- 단점: php-fpm은 연결이 짧기 때문에 각 요청에 대해 연결이 먼저 설정되면 트래픽이 많은 시나리오에서 마스터 프로세스가 바빠져 CPU를 낭비하고 트래픽이 많은 모드에 적합하지 않습니다.
- 이 모드는 더 이상 사용되지 않습니다
동적
작업자의 일부는 초기에 생성되며 작업자 수는 작업 중에 동적으로 조정됩니다.최대 작업자 수는 pm.max_children 및 process.max에 의해 영향을 받습니다.
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
- 유휴 프로세스 수가 min_spare_servers보다 적으면 새 자식 프로세스를 생성하고 총 자식 프로세스 수는 pm.max_children보다 작거나 같고 process.max보다 작거나 같습니다.
- 유휴 프로세스 수가 max_spare_servers보다 크면 시작 시간이 가장 긴 하위 프로세스가 종료됩니다.
- 자식 프로세스(유휴 상태)의 수가 max_children보다 크면 경고 로그가 인쇄되고 처리가 종료됩니다.
- 프로세스가 max_children보다 작음, num 계산, num 작업자 시작
- 장점: 동적 확장, 시스템 리소스 낭비 없음
- 단점: 모든 작업자가 작업 중 새로운 요청이 오면 작업자 프로세스 생성을 기다려야 함 가장 긴 대기 시간은 1초(프로세스를 확인하고 생성하기 위해 내부에 1초 타이머가 있음) 빈번한 시작 및 중지 프로세스가 CPU를 소모하므로 요청 횟수가 안정적이며 자주 파기해야 함
공전
고정된 수의 작업자를 시작하고 유휴 작업자 수 및 활성 작업자 수와 같은 프로세스의 일부 상태 정보를 계산하는 데 사용되는 1초 타이머도 있습니다.
pm.max_children = 10 #必须配置这个参数,而且只有这个参数有效
- 장점: 부하를 동적으로 판단할 필요가 없으며 성능이 향상됩니다.
- 단점: 정적으로 구성할 경우 max_children의 수만 고려하면 되며 cpus 수와 응용 프로그램의 응답 시간에 따라 달라짐 고정된 크기의 프로세스를 한 번에 시작하면 시스템 리소스가 낭비됨
모드 선택
- Static은 메모리가 큰 머신에 적합하고, dynamic은 메모리가 작은 2g 서버에 적합하며, ondemand 모드는 2g 미만의 작은 메모리에 적합합니다.
- 프로세스가 많을수록 프로세스 관리 오버헤드와 프로세스 컨텍스트 전환이 증가하고 동시 실행 수는 CPU 코어 수를 초과하지 않으며 CPU 집약적이며 pm.max_children은 다음과 같은 경우 CPU 코어 수를 초과할 수 없습니다. 아니요, 오후를 변경할 수 있습니다. .max_children의 값은 CPU 코어 수보다 크게 설정됩니다.
- 프로세스 수를 동적으로 생성
- N+20%에서 M/m 사이
- N은 CPU 코어 수, M은 메모리, m은 각 PHP 프로세스의 메모리 수입니다.
- 정적 프로세스 수
- M/(m*1.2)
- pm.max_requests, 최대 요청 수를 설정합니다. 이 수에 도달하면 작업자 프로세스가 자동으로 장기화되고 번식 메모리가 예기치 않게 증가합니다.
기타 구성 설명
# 全局设置
process.max = 10 #最大进程数
# www.conf
user = nobody # 进程发起的用户和用户组,nobody为任意用户,user必须设置,group不用
group = www
listen = [::]:9000
pm = dynamic # 进程池管理器如何控制子进程数量,static,静态,固定值 dynamic 动态 ondemand
pm.max_children = 16 # 同一时刻能够存活的最大子进程数
pm.start_servers = 4 # 启动时启动的子进程数
pm.min_spare_servers = 2 # 处于空闲 idle状态的最小进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建, 可以有效的减少创建的进程数,请求处理不过来,才会循序渐进的创建
pm.max_spare_servers = 16 # 最大空想进程数,空闲子进程数超过这个值,那么相应的子进程会被杀掉
catch_workers_output = yes # worker进程的标准输出和错误输出会重定向到错误日志中,没有设置会输出到/dev/null
;slowlog = xxx # 默认关闭,慢日志路径
;request_slowlog_timeout = 0 # 脚本执行超过多久就记录到日志文件