2016-09-16 5 views
4

나는 동적 인 프로세스 관리자를 사용하여 php-fpm이 어떻게 작업자를 관리하는지 명확히하고 싶습니다.php-fpm은 동적 프로세스 관리자로 작업자를 어떻게 관리합니까?

의 우리가 설정 다음과 같은 한 가정 해 봅시다 :

pm = dynamic 
pm.max_children = 100 
pm.start_servers = 30 
pm.min_spare_servers = 20 
pm.max_spare_servers = 60 
  1. PHP-FPM 시작, 그것은 30 개 프로세스
  2. 을 생성합니다 어떤 연결이 없습니다. php-fpm은 min_spare_servers에 따라 10 명의 직원을 차단합니까? 예, 몇 시간이 지나면 발생합니까?
  3. nginx에는 40 개의 연결이 있습니다. php-fpm은 별도의 작업자와 각각의 연결을 제공 할 것이며 나머지 연결을 만족시키기 위해 즉시 추가 작업자를 생성 할 것입니까?
  4. nginx에는 80 개의 연결이 있습니다. 60 명의 근로자를 시작한 후에 php-fpm은 어떻게 작동할까요? (3)과 동일합니까?
  5. nginx에는 120 개의 연결이 있습니다. 100 명의 직원에게 100 명의 직원을 배정한 후 어떻게됩니까? php-fpm은 연결을위한 대기열을 사용합니까? 그것은 nginx를 제한 할 것인가? php-fpm이 "서버가 pm.max_children 설정에 도달했습니다"라는 메시지와 함께 연결을 시작합니까?
    1. nginx에는 50 개의 연결이 있습니다. nginx가 100에서 60 연결로 돌아갈 것입니까? 아니면 50? 즉시 40 명을 죽일 것인가 아니면 잠시 기다릴 것인가?

당신이보다시피,이 오히려 PHP-FPM이 프로세스를 관리하는 방법에 대한 일반화 된 질문입니다. 더 구체적으로 말하자면, pm.max_childrenpm.max_spare_servers의 차이점을 php-fpm으로 이해하고 싶습니다.

답변

5

우선 nginx 연결 대신 php-fpm이 제공하는 업스트림에 대한 연결/요청에 대해 설명한다고 가정 해 보겠습니다.

  1. 연결이 없습니다. php-fpm은 min_spare_servers 설정에 따라 10 명의 작업자를 종료합니까? 예, 몇 시간이 지나면 발생합니까?

아니, 내 테스트에 따르면, 마스터 프로세스는 min_spare_servers 수에 따라 추가 근로자를 종료하지 않습니다. 아마도 start_serversmin_spare_servers과 같게 지정하는 것이 좋습니다.

  1. nginx에는 40 개의 연결이 있습니다. php-fpm은 별도의 작업자와 각각의 연결을 제공 할 것이며 나머지 연결을 만족시키기 위해 즉시 추가 작업자를 생성 할 것입니까?

올바른 경우 php-fpm에 대한 동시 연결은 별도의 작업자에게 제공됩니다. 요청 수가 start_servers 이상인 경우 마스터 프로세스는 추가 직원 (fpm_children_make 호출)을 포크 화합니다 (최대 max_spare_servers).

  1. nginx에는 80 개의 연결이 있습니다. 60 명의 근로자를 시작한 후에 php-fpm은 어떻게 작동할까요? (3)과 동일합니까?

max_children 수에 도달 할 때까지, 동시에 모든 요청을 처리하는 데 필요한만큼 많은 노동자 포크 것이다; fpm 마스터 프로세스가 매 초마다 유지 보수를 수행합니다 (fpm_pctl_perform_idle_server_maintenance 호출) : 생성 된 작업자 수가 max_spare_servers 이상인 경우, 유휴 상태의 작업자는 SIGCHLD 신호를 마스터 프로세스 (fpm_got_signalfpm_children_bury 호출)로 보냅니다.

  1. nginx에는 120 개의 연결이 있습니다. 100 명의 직원에게 100 명의 직원을 배정한 후 어떻게됩니까? php-fpm은 연결을위한 대기열을 사용합니까? 그것은 nginx를 제한 할 것인가? php-fpm이 "server pm.max_children setting"이라는 메시지와 함께 연결을 시작합니까?

수정, 디버그 모드에서 메시지를 따를 것이다 : seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers

    nginx를 50 개 연결이
  1. . nginx가 100에서 60 연결로 돌아갈 것입니까? 아니면 50? 즉시 40 명을 죽일 것인가 아니면 잠시 기다릴 것인가? 유휴 상태에서

모든 근로자가 종료되며, 숫자 max_spare_servers에 도달 한 후 마스터 프로세스는 종료를 중단합니다.
매개 변수 min_spare_serversmax_spare_servers은 유휴 상태에서 동시에 작동 할 수있는 최소 및 최대 작업자 수를 담당합니다. ... error_log = /var/log/php5-fpm/fpm-daemon.log ... log_level = debug ... 따르 로그 파일 : tail -f /var/log/php5-fpm/fpm-daemon.log을하고 행동을 이해하기 위해 아파치 벤치 마크 도구 ab를 사용 국자를 이해 php-fpm.conf에서 디버그 로깅을 설정하려고하기 위해


.

+0

자세한 답변을 보내 주셔서 감사합니다. 5.에 대한 답을 명확히 해 주시겠습니까? 주로 php-fpm 대기열 연결을 사용합니까, 아니면 그냥 삭제합니까? –

+2

상태 페이지를 사용하면 대기열과 관련된 일부 데이터를 가져올 수 있습니다. 매개 변수'listen queue len'은 큐에 넣을 수있는 최대 연결 수를 정의합니다. 이 숫자는 풀 설정 (listen.backlog)에 정의됩니다. php-fpm은 파일/tcp 소켓을 사용하기 때문에이 숫자는'/ proc/sys/net/core/somaxconn'에 정의 된 시스템 변수로 제한됩니다. – antonbormotov

+0

대기열이 가득 차면 곧 요청이 거부됩니다. – antonbormotov