Điều chỉnh nginx worker_process để đạt được 100k lượt truy cập mỗi phút


115

Chúng tôi có một máy chủ đang cung cấp một tệp html.

Lúc này máy chủ có 2 CPU và 2GB ram. Từ blitz.io, chúng tôi nhận được khoảng 12 nghìn kết nối mỗi phút và bất cứ nơi nào từ 200 thời gian chờ trong 60 giây đó với 250 kết nối đồng thời mỗi giây.

worker_processes  2;

events {
 worker_connections 1024;
}

Nếu tôi tăng thời gian chờ, thời gian phản hồi bắt đầu tăng lên sau một giây.

Tôi có thể làm gì khác để vắt nhiều nước hơn từ thứ này?

Câu trả lời:


188

Tập tin cấu hình:

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)


# Total amount of users you can serve = worker_processes * worker_connections

thông tin thêm: Tối ưu hóa nginx để tải lưu lượng truy cập cao


14
Tôi nghĩ rằng phương trình cung cấp cho tổng lượng người dùng mỗi giây là sai. Thay vào đó, lượng người dùng được phục vụ trung bình mỗi giây phải là = worker_processes * worker_connections / (keepalive_timeout * 2) Do đó, tệp conf ở trên có thể phục vụ ~ 7.6K kết nối mỗi giây, cao hơn mức mà @ablemike cần. Tuy nhiên, worker_rlimit_nofile là một chỉ thị tốt để sử dụng, nếu ulimit bị hạn chế và bạn không muốn sửa đổi nó.
Ethan

2
@Ethan, tại sao nó phải được chia thành 2? Nếu mỗi giây chúng ta nhận được 100 kết nối mới và thời gian chờ là 5, sau đó xâu chuỗi với giây thứ sáu, chúng ta sẽ liên tục có 5 * 100 kết nối vẫn không bị ngắt ở phía máy chủ. chúng tôi có thể có ít hơn nếu một số người dùng hủy bỏ kết nối mình
Bulat

3
rằng công thức không làm việc nếu keepalive được thiết lập để 0s (vô hiệu hóa)
Tilo

5
Mỗi kết nối cần 2 tệp xử lý ngay cả đối với tệp tĩnh như hình ảnh / JS / CSS. Đây là lần 1 cho kết nối của khách hàng và lần 2 để mở tệp tĩnh. Do đó, sẽ an toàn hơn khi thay đổi worker_rlimit_nofile = 2 * worker_connections.
Ethan

4
Sử dụng worker_rlimit_nofile nhưng người ta cũng nên gọi 'ulimit -n' để đặt giá trị số lượng tệp đang mở cho mỗi quá trình. Điều này được thực hiện tốt hơn trong init script.
Ethan
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.