Bagaimana saya bisa mengamati apa yang dilakukan nginx? (untuk menyelesaikan: "1024 koneksi pekerja tidak cukup")

8

Saya memiliki situs lalu lintas yang sangat rendah berjalan di nginx, dengan 4 pekerja, masing-masing 1024 koneksi.

Setiap beberapa jam saya mulai melihat di log kesalahan "1024 worker_connections tidak cukup", dan situs saya melambat / menjadi flakey. Restart nginx menyelesaikan masalah sepenuhnya untuk beberapa jam ke depan.

Jelas sesuatu yang aneh sedang terjadi, tidak mungkin saya melayani pengguna bersamaan 4k dari aplikasi saya.

Selain melihat log akses (yang terlihat normal), apakah ada cara untuk mengamati dengan lebih detail apa yang dilakukan nginx?

Apakah ada beberapa kombinasi konfigurasi terkenal yang mungkin mengakibatkan koneksi lama ditahan terbuka dan tidak ditutup?

Terima kasih.

sunting ini terlihat tidak benar

# lsof |grep nginx |grep CLOSE_WAIT |wc -l
1271
John Bachir
sumber
Apakah Anda menggunakan proxypass?
Dan R
Tidak, saya tidak menggunakan pengaturan proxy apa pun. Ini adalah situs rel pada penumpang.
John Bachir
1
Mungkin coba nginx.org/en/docs/debugging_log.html memungkinkannya untuk melihat permintaan mana yang terjadi. Saya tidak terbiasa dengan penumpang / rel. Jika ini ada di port yang menghubungkan ke klien web, klien telah menutup koneksi tetapi nginx belum ditutup pada sisinya.
Dan R

Jawaban:

7

Tanpa proxy pass / reverse proxy

max_clients = worker_processes * worker_connections

Dengan proxy terbalik

max_clients = (worker_processes * worker_connections ) / (X * 2)

2 adalah karena Anda membuka koneksi ke apa yang Anda proksi

Namun X adalah banyak koneksi bersamaan yang dibuat klien ini untuk Anda

Untuk melihat koneksi mana yang berkeliaran Anda dapat menjalankan lsof -i :PORT. Ini akan menampilkan semua koneksi terbuka ke nginx, dan statusnya.

Dan R
sumber
mencoba itu ... lsof 4,81 di Ubuntu ... "karakter opsi ilegal: I"
John Bachir
lihat output lsof di edit di atas
John Bachir
1
tidak bermaksud menggunakan huruf kapital -i
Dan R