php-fpm 중 maxchildren 설정

현재 nginx+fpm 는 기본적으로 주류 의 설정 이 되 었 는데,그 중에서 우리 가 비교적 주목 하 는 것 은 pm.max 이다.chindren 설정
우선,우 리 는 하나의 설정 에 관심 을 가진다.pm = static/dynamic,
이 옵션 은 fpm 하위 프로 세 스 를 표시 하 는 모드 입 니 다.
static:fpm 가 실 행 될 때 직접 forkpm.max_chindren개의 worker 프로 세 스 를 표시 합 니 다.
dynamic:실행 시 fork 출력start_servers프로 세 스 를 표시 합 니 다.부하 상황 에 따라 동적 조정 은 최대 max 를 초과 하지 않 습 니 다.children 프로 세 스.
일반적으로 static 를 사용 하 는 것 을 추천 합 니 다.장점 은 부하 상황 을 동태 적 으로 판단 하지 않 고 성능 을 향상 시 키 는 것 입 니 다.단점 은 시스템 메모리 자원 을 많이 사용 하 는 것 입 니 다.
위의 것 은 우리 에 게 maxchindren 이 대표 하 는 worker 의 프로 세 스 수 입 니 다.보편적으로 이 설정 이 많 을 수록 동시에 처리 할 수 있 는 병행 도 많 고 이것 은 비교적 큰 잘못된 부분 이 라 고 생각 합 니 다.
  • 1)사실 프로 세 스 가 많아 졌 습 니 다.프로 세 스 전환 비용 을 증가 합 니 다.더 핵심 적 인 것 은 동시 실행 할 수 있 는 fpm 프로 세 스 가 cpu 개 수 를 초과 하지 않 습 니 다.워 커 의 개 수 를 더 열 어 qps 를 올 리 는 것 은 잘못된 이해 입 니 다.프로 세 스 를 몇 개 더 열 었 다 고 말 하지 않 고 cpu 를 몇 개 더 내 서 처리 합 니 다.
  • 2)워 커 프로 세 스 가 줄 어 들 었 습 니 다.server 가 바 쁘 면 nginx 가 fpm 로 데 이 터 를 보 낼 때 모든 워 커 가 작업 중 이 며 빈 워 커 가 요청 을 받 아들 이지 않 아 502 가 발생 합 니 다.
  • 3)실제 업무 에서 저 희 는 i/o 작업 이 많 습 니 다.예 를 들 어 데이터 베 이 스 를 읽 거나 내부 rpc 호출 등 i/o 를 기다 리 는 과정 에서 프로 세 스 는 시스템 sleep 에 의 해 cpu 를 차지 하지 않 고 Worker 를 적 게 설정 하면 cpu 를 사용 하지 못 할 수도 있 습 니 다
  • 그럼 워 커 수 는 어떻게 설정 해 야 하나 요?
    이론 적 으로 woker 프로 세 스 수=cpu 의 개 수 는 가장 합 리 적 이지 만 두 번 째 점 으로 인해 모든 worker 가 요청 을 다 처리 하지 못 했 을 수도 있 습 니 다.그러면 502 가 자주 나타 납 니 다.그러나 프로 세 스 를 많이 열 면 502 를 피하 고 잠시 hang 을 요청 하 는 것 이 라 고 만 할 수 있 습 니 다.그러나 이것 은 완화 의 길 일 뿐 입 니 다.실제로 시스템 의 병발 을 증가 시 키 지 않 을 뿐만 아니 라 시스템 의 부 하 를 가중 시 킬 수 있 기 때문에 2,3 을 바탕 으로 합 리 적 인 worker 수 를 설정 하 는 것 이 중요 합 니 다.
    천하 의 무공 은 빠 르 기만 하고 깨 지지 않 는 다.가능 한 한 프로그램의 효율 을 향상 시 키 고 하나의 요청 시간 을 최소 화 시 켜 야 한다.그러면 하나의 worker 의 처리 시간 이 짧 아 지면 단위 시간 에 처리 할 수 있 는 요청 이 자연히 많아 진다.
    그러면 모든 워 커 가 단위 시간 내 에 처리 하 는 요청 수 를 통 해max_children의 개 수 를 예측 할 수 있다.만약 가장 큰 요청 의 처리 시간(xhprof 에서 cpu 를 보 는 시간)이 100 ms 내 이 고 100 ms 내 에 100 개의 요청 이 동시에 온다 면 이론 적 으로 100 개의 worker 프로 세 스 를 설정 하고 먼저 hang 에 요청 을 해 야 합 니 다.
    그러나 가장 큰 요청 시간 은 많은 외적 인 상황 의 영향 을 받 을 수 있 습 니 다.예측 하기 어렵 습 니 다.특히 네트워크 i/o 도 안에 포함 되 어 있 습 니 다.우 리 는 제3자 의 profile 도 구 를 빌 릴 수 있 습 니 다.예 를 들 어 xhprof 등 도 구 는 cpu 의 시간 소 모 를 통계 할 수 있 습 니 다.이 시간 을 통 해 진정한 worker 수량 을 계산 할 수 있 습 니 다.전체 시간 보다 합 리 적 으로 계산 할 수 있 습 니 다.사실은 여기 지름길 이 있 습 니 다.당신 의 max 를 설정 합 니 다.children 수,바로 당신 이 전기 에 max 를childnren 은 비교적 큰 값 으로 설정 하여 일정 시간 안정 적 으로 운행 한 후 fpm 의 statusmax active processes 가 얼마 인지 관찰 한 다음 maxchildren 배치 가 그 보다 좀 크 면 ok 입 니 다.
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

    좋은 웹페이지 즐겨찾기