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?

seperti ablemike
sumber

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

Bulat
sumber
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