php5-fpm : 서버가 오후 pm에 도달했습니다.


41

나는이 Nginx에 +의 PHP5-FPM을 . 시간당 여러 번 웹 사이트가 멈추고 로그 파일에 다음이 표시됩니다.

경고 : [pool www] 서버가 pm.max_children 설정 (5)에 도달했습니다. 서버를 높이십시오.

/etc/php5/fpm/pool.d/www.conf 파일에는 다음 구성이 포함되어 있습니다.

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

서버 : AMD Opteron ™ 3280, Octo-Core, 8x 2.4GHz, 16GB DIMM (DDR3).

이 서버의 www.conf 파일에 어떤 숫자를 넣어야할지 모르겠습니다. 누군가 도와 드릴까요? 감사

답변:


40

PHP-FPM이에 도달하는 데는 여러 가지 이유가 있습니다 max_children. 가장 일반적인 것은 다음과 같습니다.

  • 고객의 많은 병렬 요청
  • PHP 스크립트의 느린 실행
  • 매우 낮은 설정 max_children

PHP + Nginx 이외의 다른 것이 없다고 가정하면 컴퓨터의 사양을 살펴보면 5보다 크게 설정할 수 있다고 생각합니다. 코어가 8 개 있다고 말하면 일반적으로 Nginx는 PHP보다 CPU가 훨씬 적게 필요하므로 5 명의 자녀가 있습니다. 당신은 아마 그들 모두를 사용할 수 없을 것입니다. 나는 보통 PHP 스크립트의 메모리 소비에 따라 코어 수 x 2 또는 코어 수 x 4 와 같은 것으로 설정합니다 .


PHP 채팅이 포함 된 데이트 웹 사이트이며 사용자는 수백만 개의 인스턴트 메시지를 보냅니다. 지난 밤에 온라인으로 ~ 300 명의 사용자가있을 때 netstat -an | grep 80 | wc-결과는 거의 400이었습니다.
user1821484

1
사실 비슷한 데이트 웹 사이트가 있습니다. 더 많은 PHP 어린이가 필요하다고 생각합니다. 내 구성은 다음과 같습니다. 20k 명의 동시 온라인 사용자, 각각 8 개의 코어가있는 12 대의 PHP 머신, 각 PHP 머신의 32 명의 작업자 꽤 잘 작동합니다. 당신은 또한 당신의 PHP가 크지 않은 한, 당신이 가지고있는 여유 메모리의 양을보아야합니다. 여유 메모리가 있다면 더 많은 작업자에게 사용하지 않겠습니까?
재생

@ user1821484 이것은 정확합니다. pm.max_children입니다 너무 낮은 . RAM이 1GB 인 소형 VPS 서버에는 값 10이 적당합니다. 훨씬 더 큰 서버가 있습니다. 오류 수신을 중지 할 때까지이 값을 높이고 트래픽 급증이 발생하는 경우 다시 올리십시오.
Michael Hampton

답변 주셔서 감사합니다. pm.max_children 설정을 10으로 늘리고 이제이 오류가 발생하기 시작했습니다. 경고 : [pool www]가 사용중인 것 같습니다 (pm.start_servers 또는 pm.min / max_spare_servers를 늘려야 할 수도 있음), 16 명의 자식을 생성하면 0이 있습니다. 유휴 상태, 총 8 명의 자녀 누군가 내가 증가시켜야 할 것을 제안 할 수 있습니까? 감사.
user1821484

코어 x 2 또는 코어 x 4의 소리가 정말 낮습니다. pm.max_children = 48의 8 코어 및 8GB RAM이 장착시스템이 있는데 서버가 pm.max_children 경고에 도달했습니다 . 이 머신은 CPU 또는 메모리 한계에 근접하지 않습니다. 더 좋은 방법은 해당 nginx (또는 아파치) 설정과 함께이 설정을 최적화하고 각 PHP 프로세스가 소비하는 메모리 양을 결정한 후 값을 선택하는 것입니다.
S. Imp

18

pm.max_requests 값 (기본적으로 주석 처리됨)을 설정하면 이러한 오류를 수정하는 데 도움이됩니다. 이 설정은 특정 횟수의 요청을 실행 한 후 하위 요청을 강제로 다시 생성하며 코드 또는 타사 라이브러리의 어딘가에 메모리 누수가있는 경우 유용 할 수 있습니다.

에서 /etc/php-fpm.d/www.conf :

pm.max_requests = 500

13

링크 는 유용 할 수 있습니다. 시스템의 메모리 양을 기반으로 하위 프로세스 수를 계산하는 방법에 대해 설명합니다.


7
링크가 사라지면이 답변은 쓸모가 없습니다.
miken32

2
기본적으로 링크는 다음과 같이 말합니다. pm.max_children의 적절한 값은 다음과 같이 계산할 수 있습니다. pm.max_children = 웹 서버 전용 총 RAM / 최대 자식 프로세스 크기
jaywhy13
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.