2009-08-11 22 views
14

Các tài liệu nginx nói

max_clients = worker_processes * worker_connections 

nhưng là những gì như thế nào là yếu tố keepalive vào điều này? Tôi có thiết lập cấu hình với 2 worker_processes và 8192 worker_connections; điều đó có nghĩa là tôi về mặt lý thuyết có thể xử lý tối đa 16384 kết nối đồng thời. Đẩy ra 16384 luồng dữ liệu đồng thời là ginormous, nhưng nếu tôi có 60s keepalive_timeout thì với mỗi khách hàng sẽ gửi một kết nối trong 1 phút con số đó có một ý nghĩa hoàn toàn khác. Đó là nó?

Đã kết nối với tất cả điều này là biến kết nối $ có thể được sử dụng với chỉ thị log_format. Tôi đã xác định định dạng nhật ký sau để tôi có thể phân tích hiệu suất của máy chủ:

log_format perf '$request_time $time_local $body_bytes_sent*$gzip_ratio $connection $pipe $status $request_uri'; 

Biến kết nối $ đó báo cáo khoảng 11-12 triệu kết nối! Tôi không có chuyên ngành toán học, nhưng rõ ràng con số đó cao hơn nhiều so với worker_processes * worker_connections. Vì vậy, nó phải đại diện cho những gì?

Tóm lại, tôi đang cố gắng tìm ra cách để xác định giá trị tốt cho worker_connection.

Trả lời

9

$ kết nối là bộ đếm chứ không phải tổng số kết nối được sử dụng ngay bây giờ. Vì vậy, nó dự định phát triển.

kết nối Keepalive không thể bị loại bỏ, vì vậy căn phòng là worker_processes * worker_connections - kết nối keepalive

+0

Một bộ đếm! Bây giờ bạn nói nó tôi có thể thấy mô hình. Cảm ơn bạn đã trả lời câu hỏi tối nghĩa này. – Daniel

1

chỉ tưởng tượng toàn bộ hình ảnh: khách hàng đầu tiên kết nối với bạn, nhận được một tập tin và sau đó trình duyệt giữ kết nối cho 60 giây. một máy khách khác kết nối, nhận và giữ kết nối của nó. vào cuối phút giao dịch, bạn có thể có (trong trường hợp xấu nhất) tất cả các khách hàng đã yêu cầu bạn từ 60 giây trở lên vẫn giữ kết nối của họ mở

vì vậy, trong trường hợp xấu nhất, bạn sẽ phục vụ "worker_processes * worker_connections/keep_alive "kết nối trong một giây, tức là khoảng 260 cho số của bạn. nếu bạn cần nhiều hơn, bạn nên alloc nhiều kết nối - chỉ phục vụ keepalives: đọc answerr tôi trong Tuning nginx worker_process to obtain 100k hits per min

afaik nginx có thể giữ 10k của hoạt động kết nối (keepalived) trong 2.5MB bộ nhớ, do đó tăng worker_connections là giá rẻ, rất rẻ . tôi nghĩ rằng nút cổ chai chính ở đây có thể là chính hệ điều hành của bạn

Các vấn đề liên quan