PHP 프로 세 스 관리자 php-fpm

php-fpm 가 뭐 예요?
php-fpm 는 PHP 의 프로 세 스 관리자 입 니 다.php 아래 의 많은 work 프로 세 스 는 php-fpm 프로 세 스 관리자 가 관리 합 니 다.
php-fpm 의 작업 원리
php-fpm 전체 이름 은 PHP FastCGI 프로 세 스 관리자 입 니 다.php-fpm 가 시 작 된 후 php.ini 를 먼저 읽 은 다음 에 해당 하 는 conf 프로필 을 읽 습 니 다.conf 설정 은 php.ini 설정 을 덮어 쓸 수 있 습 니 다.
php-fpm 를 시작 하면 master 프로 세 스 를 만 들 고 9000 포트(설정 가능)를 감청 합 니 다.master 프로 세 스 는 fpm.conf/www.conf 에 따라 몇 개의 하위 프로 세 스 를 만 들 고 하위 프로 세 스 는 실제 업 무 를 처리 합 니 다.
클 라 이언 트(예 를 들 어 nginx)가 9000 포트 를 연결 할 때 남 은 하위 프로 세 스 는 스스로 accept 를 합 니 다.하위 프로 세 스 가 모두 바 쁜 상태 에 있 으 면 새로 들 어 온 accept 연결 은 master 에 의 해 대기 열 에 들 어가 fpm 하위 프로 세 스 가 남 을 때 까지 기 다 립 니 다.accept 를 저장 할 반 연결 대기 열 이 얼마나 길 고 listen.backlog 에서 설정 합 니 다.
php-fpm 프로 세 스 와 하위 프로 세 스 를 보 는 방법
php-fpm 와 관련 된 모든 프로 세 스 를 보십시오.아래 그림

여기pool www모두 phop-fpm 의 하위 프로 세 스 입 니 다.즉,우리 가 흔히 말 하 는 work 프로 세 스 입 니 다.
php-fpm 아래 하위 프로 세 스 보기
위의 명령 을 통 해 phop-fpm 와 관련 된 프로 세 스 를 볼 수 있 습 니 다.phop-fpm 의 master 프로 세 스 와 work 프로 세 스 를 보다 직관 적 으로 볼 필요 가 있다 면 아래 의 방식 으로 프로 세 스 를 볼 수 있 습 니 다.
이곳 의 5370 은 php-fpm 의 master 프로 세 스 번호 입 니 다.위의 명령 을 통 해 이미 직관 적 으로 얻 을 수 있다.

위의 명령 을 통 해 phop-fpm 는 master 프로 세 스 로 서 15 개의 키 프로 세 스 가 있 음 을 알 수 있 습 니 다.이 하위 프로 세 스 수 는 프로 세 스 사용자 정의 설정 이 가능 합 니 다.다음 매개 변수 프로 세 스 설정 을 통 해:

pm = dynamic #        
pm.max_children = 20 #       
pm.start_servers = 15 #    php-fpm   ,       
php-fpm 매개 변수 설정 설명
php-fpm 전역 설정 매개 변수

#php-fpm     。
#               fpm。
user = www
group = www

#php-fpm     ,     ,    socke  。
#        tcp,   socket    socket  ,        。
listen = 127.0.0.1:9000 

#  socket     ,      user、group     。
#          ,    。
listen.owner = www
listen.group = www
listen.mode = 0660

#  php-fpm       。   ","  。           。
#  Nginx php-fpm         ,      Nginx   ip  。
# Nginx php-fpm          ,    127.0.0.1  。
listen.allowed_clients = 127.0.0.1 

#pid         ,       php  ,
#         pid  ,                php-fpm      ,
#      。   none。
pid = /opt/remi/php72/root/var/run/php-fpm/php-fpm.pid 

#      ,  :     #INSTALL_PREFIX#/log/php-fpm.log。
#     syslog,log     syslogd          。
error_log = /opt/remi/php72/root/var/log/php-fpm/error.log 

#PHP        
security.limit_extensions = .php .php3 .php4 .php5 .php7

#      ,      fpm  ,             。
syslog.ident = php-fpm 

#    ,  :alert, error, warning, notice, debug。
log_level = notice 

#      ,     emergency_restart_interval      。
emergency_restart_threshold = 60 

#            。          ,
#   SIGSEGV SIGBUS       emergency_restart_threshold      。
#   fpm       ,  0  off    ,      :s ,m ,h ,d 。
emergency_restart_interval = 60s 

#                   。
process_control_timeout = 0 

#         ,fpm   fork     ,0     ,
#                 ,    。
process.max = 128 

#         , master   root       ;
#      ,      master      ,   -19(  ) 20(  ),     。
process.priority = -19 

#   no    bug,   yes。
daemonize = yes 

#master            。          。
rlimit_files = 1024 

#master    rlimit   ;  unlimited >=0   ,       。
rlimit_core = 0

#      ,      ,   :select,poll,
#epoll(linux>=2.5.44),kqueue,/dev/poll,port
events.mechanism = epoll 

#fpm          。   s,m,h。
#   fpm        。
systemd_interval = 10s 
php-fpm 프로 세 스 풀 설정

#php-fpm     。
listen.backlog = 65535 

#php     ,   master   root     ,
#          ,        master      。
process.priority = -19 

#       
#static(    ,   php-fpm               );
#dynamic(    ,   php-fpm   pm.start_servers            ,       );
#ondemand(    ,   php-fpm       ,        fork   );
pm = dynamic 

#       
pm.max_children = 5 

#        ,    pm = dynamic    。
pm.start_servers = 2 

#          2    ,         ,     dynamic    
pm.min_spare_servers = 2 

#            ,   kill,     dynamic    
pm.max_spare_servers = 3 

#       ,                ,        killed。
pm.process_idle_timeout = 10s

#              。              。
pm.max_requests = 500 

#php-fpm     uri
pm.status_path string

#php-fpm      ping   。
#      ,      ping   。
#         php-fpm            。          (/)。
ping.path string

#    ping       。    HTTP 200   text/plain     。   :pong。
ping.response string

#  worker nice(2)   (       )。
#    -19(     )   20(     )。 
#   :   
process.priority int

#          
prefix string

#      ,    ,  yii2       index.php,       PHP  。
access.log = var/log/$pool.access.log 

#php    
slowlog = var/log/$pool.log.slow 

#       
request_slowlog_timeout = 2s 

#         , php.ini            ,       。
request_terminate_timeout = 3s 

#       ,      。
rlimit_files = 1024 

#        ,       。
rlimit_core = 0 
부분 설정 데모
php-fpm 의 backlog 크기 설정
pp-fpm 의 backlog 크기 설정 은 pp-fpm 의 처리 능력 과 관련 이 있 으 며,클 수록 좋 은 것 이 아 닙 니 다.
이 값 이 너무 커서 php-fpm 가 처리 되 지 않 습 니 다.nginx 쪽 에서 시간 을 초과 하여 연결 을 끊 고 504 gateway timeout 오 류 를 보고 합 니 다.동시에 php-fpm 처리 완료 write 데 이 터 를 nginx 에 보 낼 때 TCP 연결 이 끊 긴 것 을 발견 하고"Broken pipe"를 보고 합 니 다.
이 값 이 너무 작 으 면 nginx 와 같은 client 요청 은 php-fpm 의 accept queue 에 들 어 갈 수 없습니다."502 Bad Gateway"오류 가 발생 했 습 니 다.따라서 php-fpm 의 QPS 에 따라 backlog 의 크기 를 결정 해 야 한다.계산 방식 은 QPS=backlog 가 가장 좋다.
php-fpm 시작 모드
pp-fpm 는 socket 으로 시작 하거나 포트 로 시작 합 니 다.이 두 가지 방식 은 실제 상황 에 따라 설정 합 니 다.
nginx 와 phop-fpm 는 같은 서버 에 있 습 니 다.이 때 는 유 닉 스 socket 프로 세 스 간 통신 을 직접 할 수 있 습 니 다.tcp 포트 로 통신 하지 않 고 연결 을 만 드 는 시간 을 절약 하여 성능 을 향상 시 킬 수 있 습 니 다.sock 파일 은 어디 에 나 만 들 수 있 습 니 다.fpm 가 그 디 렉 터 리 에 파일 을 쓸 수 있 는 권한 이 있 으 면 nginx 는 읽 을 수 있 는 권한 이 있 습 니 다.tcp 연결 이 더욱 안정 적 입 니 다.tcp 프로 토 콜 이 데이터 의 정확성 을 보장 하지만 sock 은 더 적은 데이터 복사 와 컨 텍스트 전환 이 있 고 자원 이 적 습 니 다.하지만 nginx 와 fpm 는 같은 기계 에서 만 socket 을 사용 할 수 있 습 니 다.
어떻게 socket 시작 을 선택 합 니까?포트 시작 을 선택 합 니까?
tcp 방식 은 유 닉 스 방식 에 비해 병발 량 이 높 기 때문에 병발 량 이 높 은 항목 에 대해 tcp 방식 을 사용 하 는 것 을 권장 합 니 다.현재 Nginx 설정 예제 파일 은 기본적으로 tcp 방식 입 니 다.
유 닉 스 방식 을 사용 하면 최적화 할 수 있 는 점 은 socket 파일 을/dev/shm 디 렉 터 리 아래 에 두 는 것 입 니 다.대체적으로 이 디 렉 터 리 아래 의 파일 은 하 드 디스크 에 저 장 된 것 이 아니 라 메모리 에 저 장 된 것 입 니 다.하 드 디스크 읽 기와 메모리 읽 기 에 있어 서 누가 빠 르 고 누가 느 린 지 는 틀림없이 메모리 가 가장 빠 를 것 이다.
socket 방식 으로 socke 파일 을 보 는 방법 을 시작 합 니 다.
socket 파일 은 위 에서 언급 한 pid 설정 항목 에 따라 정 해 집 니 다.우 리 는 프로 세 스 번 호 를 보기 위해 cat 명령 을 직접 사용 할 수 있 습 니 다.

하위 프로 세 스 의 기본 시작 수량 은 위의 pm=dynamic 설정 을 통 해 알 수 있 습 니 다.이 방식 은 하위 프로 세 스 크기 를 동적 으로 설정 하 는 동시에 기본 하위 프로 세 스 수 를 설정 할 수 있 습 니 다.

pm = dynamic
pm.max_children = 20
###   15    ,          shell      。
pm.start_servers = 15 
3 으로 설정 하려 고 할 때 다음 과 같은 오류 정 보 를 표시 합 니 다.

설명,이곳 의 startserver 설정 항목 과 minspare_server 설정 은 일정한 관계 가 있 습 니 다.우 리 는 최소 10 으로 설정 하면 php-fpm 를 정상적으로 시작 할 수 있 습 니 다.
이상 은 PHP 프로 세 스 관리자 pp-fpm 의 상세 한 내용 을 알 아 보 는 것 입 니 다.더 많은 PHP 프로 세 스 관리자 pp-fpm 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기