Menyesuaikan nginx worker_process untuk mendapatkan 100 ribu klik per menit


115

Kami memiliki server yang melayani satu file html.

Saat ini server memiliki 2 CPU dan 2GB ram. Dari blitz.io, kami mendapatkan sekitar 12k koneksi per menit dan dari 200 waktu tunggu dalam 60 detik itu dengan 250 koneksi bersamaan setiap detik.

worker_processes  2;

events {
 worker_connections 1024;
}

Jika saya menambah waktu tunggu, waktu respons mulai merayap lebih dari satu detik.

Apa lagi yang bisa saya lakukan untuk memeras lebih banyak jus dari ini?

Jawaban:


188

File konfigurasi:

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

info lebih lanjut: Mengoptimalkan nginx untuk beban lalu lintas tinggi


14
Saya pikir persamaan yang diberikan untuk jumlah total pengguna per detik salah. Sebaliknya, jumlah rata-rata pengguna yang dilayani per detik harus = worker_processes * worker_connections / (keepalive_timeout * 2) Oleh karena itu, file conf di atas dapat server ~ 7,6K koneksi per detik, yang jauh di atas yang dibutuhkan @ablemike. Namun, worker_rlimit_nofile adalah perintah yang baik untuk digunakan, jika ulimit membatasi dan Anda tidak ingin mengubahnya.
Ethan

2
@Ethan, kenapa harus dibagi 2? Jika setiap detik kita mendapatkan 100 koneksi baru, dan timeout adalah 5, kemudian strting dengan detik keenam, kita akan terus-menerus memiliki koneksi 5 * 100 yang masih belum diakhiri di sisi server. kami mungkin memiliki lebih sedikit jika beberapa pengguna dibatalkan sambungannya sendiri
Bulat

3
rumus itu tidak berfungsi jika keepalive disetel ke 0s (dinonaktifkan)
Tilo

5
Setiap koneksi membutuhkan 2 file menangani bahkan untuk file statis seperti gambar / JS / CSS. Ini adalah 1 untuk koneksi klien dan yang kedua untuk membuka file statis. Oleh karena itu, lebih aman untuk mengubah worker_rlimit_nofile = 2 * worker_connections.
Ethan

4
Gunakan worker_rlimit_nofile tetapi seseorang juga harus memanggil 'ulimit -n' untuk mengatur nilai jumlah file yang terbuka per proses. Ini lebih baik dilakukan dalam skrip init.
Ethan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.