연결이 부족한 Nginx 및 PHP-FPM


9

이런 오류가 계속 발생합니다.

[02-Jun-2012 01:52:04] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 19 idle, and 49 total children
[02-Jun-2012 01:52:05] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 19 idle, and 50 total children
[02-Jun-2012 01:52:06] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 19 idle, and 51 total children
[02-Jun-2012 03:10:51] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 18 idle, and 91 total children

php-fpm 설정을 다음과 같이 변경했습니다.

pm.max_children = 150 (It was at 100, i got a max_children reached and upped to 150)
pm.start_servers = 75
pm.min_spare_servers = 20
pm.max_spare_servers = 150

를 야기하는

[02-Jun-2012 01:39:19] WARNING: [pool www] server reached pm.max_children setting (150), consider raising it

방금 상당한 양의 트래픽이 발생하는 새로운 웹 사이트를 시작했습니다. 이 트래픽은 합법적이며 한계에 도달하면 504 게이트웨이 시간 초과가 발생합니다.

IPTABLES로 서버에 대한 연결이 제한되어 있고 fail2ban을 실행하고 nginx 액세스 로그를 추적하고 있습니다. 트래픽은 모두 합법적입니다. 사용자를위한 공간이 부족합니다.

현재 우분투 64 비트가있는 듀얼 코어 박스에서 실행 중입니다.

free
             total       used       free     shared    buffers     cached
Mem:       6114284    5726984     387300          0     141612    4985384
-/+ buffers/cache:     599988    5514296
Swap:       524284       5804     518480

내 php.ini max_input_time = 60

내 nginx 설정은

worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 19000;
    # multi_accept on;
}
worker_rlimit_nofile    20000;  #each connection needs a filehandle (or 2 if you are proxying)

client_max_body_size 30M;
client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     5 5;
send_timeout          10;

    location ~ \.php$ {
    try_files $uri /er/error.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_max_temp_file_size 0;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

연결이 부족하지 않게하려면 어떻게해야합니까? 왜 이런 일이 계속 발생합니까? Google 웹 로그 분석에서 실시간으로 트래픽을 모니터링하고 있으며 사용자 수가 120 명을 초과하면 php-fpm.log에 이러한 경고가 가득합니다.

답변:


5

pm.max_children? 의 값을 높이면서 로그 메시지에 제공된 좋은 조언을 따르는 것을 고려 했습니까 ? 이를 수용 할 수있는 무료 RAM이 많이 있습니다.

질문에 대답하려면 :

  • 연결이 부족하지 않게하려면 어떻게해야합니까? 더 많은 연결을 제공하거나받는 연결 수를 줄이십시오.
  • 왜 이런 일이 계속 발생합니까? 연결이 계속 끊어지기 때문입니다.

죄송합니다.이 오류는 100에서 150으로 업데이트 한 후 타임 스탬프되었습니다. 모든 램에 어떤 설정을해야합니까?
E3pO

당신은 인상해야 그것에 (free/mem_per_worker)+150, 어디에 free당신이 계정으로 메모리 요구 사항을 더 부하가 증가 할 다른 프로세스의 요구를 복용 후있을 것이다 메모리의 양이고, mem_per_worker당신이 필요로하는 각 PHP 작업자 프로세스를 예견 최대 메모리 양입니다.
womble

4

우리는 웹 서버에서 같은 문제를 겪었습니다.

메모리 누수를 피하기 위해 모든 X 요청마다 자식 프로세스를 다시 생성하려고 시도 할 수 있습니다. Apache 및 FPM에서 제대로 작동했으며 제대로 작동하기 시작했습니다.

 pm.max_requests = 50000

이것은 50k 요청마다 자식 프로세스를 다시 시작합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.