Nginx và PHP-FPM hết kết nối


9

Tôi liên tục gặp phải những lỗi như thế này,

[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

Tôi đã thay đổi cài đặt của mình cho php-fpm thành những cái này,

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

Kết quả là

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

Tôi vừa ra mắt một trang web mới đang nhận được lưu lượng truy cập đáng tin cậy trên đó. Lưu lượng này là hợp pháp và người dùng sẽ nhận được 504 thời gian chờ cổng khi đạt đến giới hạn.

Tôi có kết nối hạn chế đến máy chủ của mình bằng IPTABLES và tôi đang chạy fail2ban và theo dõi nhật ký truy cập nginx. Lưu lượng truy cập là hợp pháp, tôi chỉ hết phòng cho người dùng.

Tôi hiện đang chạy trên một hộp lõi kép với Ubuntu 64 bit.

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 của tôi

Cấu hình nginx của tôi là

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;
}

Tôi có thể làm gì để ngừng chạy kết nối? Tại sao điều này tiếp tục xảy ra? Tôi đang theo dõi lưu lượng truy cập của mình trên thời gian thực của Google Analytics và khi số lượng người dùng vượt quá khoảng 120 php-fpm.log của tôi có đầy đủ các cảnh báo này ..

Câu trả lời:


5

Bạn đã xem xét làm theo lời khuyên tốt được cung cấp trong thông điệp tường trình, nâng cao giá trị của pm.max_children? Bạn đã có những khối RAM miễn phí để chứa chúng.

Để trả lời câu hỏi của bạn:

  • Tôi có thể làm gì để ngừng chạy kết nối? Cung cấp thêm kết nối hoặc giảm số lượng kết nối bạn nhận được.
  • Tại sao điều này tiếp tục xảy ra? Bởi vì bạn tiếp tục chạy ra khỏi các kết nối.

Xin lỗi, lỗi đó đã được đánh dấu thời gian sau khi tôi đã cập nhật nó lên 150 từ 100 .... Có tôi có. Tôi nên cài đặt cài đặt nào cho tất cả ram của mình?
E3pO

Bạn nên nâng nó lên (free/mem_per_worker)+150, freedung lượng bộ nhớ bạn sẽ có sau khi tính đến nhu cầu của các quá trình khác có yêu cầu bộ nhớ sẽ tăng lên khi tải nhiều hơn và mem_per_workerlà dung lượng bộ nhớ tối đa mà bạn thấy trước mỗi quy trình nhân viên PHP yêu cầu.
womble

4

Chúng tôi đã có cùng một vấn đề trên máy chủ web của chúng tôi.

Bạn có thể cố gắng hồi sinh con xử lý mọi yêu cầu X, để tránh rò rỉ bộ nhớ. Nó hoạt động tốt trong Apache và FPM, nó cũng bắt đầu hoạt động tốt.

 pm.max_requests = 50000

Điều này sẽ khởi động lại một tiến trình con cứ sau 50k yêu cầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.