Dakikada 100 bin isabet elde etmek için nginx worker_process ayarlanıyor


115

Bir html dosyası sunan bir sunucumuz var.

Şu anda sunucuda 2 CPU ve 2 GB ram var. Blitz.io'dan dakikada yaklaşık 12k bağlantı alıyoruz ve her saniyede 250 eşzamanlı bağlantıyla bu 60 saniyede 200 zaman aşımından herhangi bir yerde.

worker_processes  2;

events {
 worker_connections 1024;
}

Zaman aşımını arttırırsam, yanıt süresi bir saniyenin ötesine geçmeye başlar.

Bundan daha fazla meyve suyu sıkmak için başka ne yapabilirim?

Yanıtlar:


188

Yapılandırma dosyası:

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

daha fazla bilgi: nginx'i yüksek trafik yükleri için optimize etme


14
Saniyedeki toplam kullanıcı sayısı için sağlanan denklemin yanlış olduğunu düşünüyorum. Bunun yerine, saniye başına sunulan ortalama kullanıcı sayısı = worker_processes * worker_connections / (keepalive_timeout * 2) olmalıdır. Bu nedenle, yukarıdaki conf dosyası saniyede ~ 7.6K bağlantı sunabilir, bu da @ablemike'ın ihtiyaç duyduğunun çok üzerindedir. Bununla birlikte, ulimit kısıtlayıcıysa ve onu değiştirmek istemiyorsanız, worker_rlimit_nofile kullanmak için iyi bir yönergedir.
Ethan 24:15

2
@Ethan, neden 2'ye bölünmeli? Her saniye 100 yeni bağlantı alırsak ve zaman aşımı 5 ise, altıncı saniyede dizilirse, sunucu tarafında hala sonlandırılmamış 5 * 100 bağlantıya sahip oluruz. bazı kullanıcıların bağlantıları kesilirse daha azına sahip olabiliriz
Bulat

3
canlı tutma 0s (devre dışı) olarak ayarlanırsa bu formül çalışmaz
Tilo

5
Görüntüler / JS / CSS gibi statik dosyalar için bile her bağlantı 2 dosya tanıtıcısına ihtiyaç duyar. Bu, istemcinin bağlantısı için 1 ve statik dosyayı açmak için 2'dir. Bu nedenle, worker_rlimit_nofile = 2 * worker_connections'ı değiştirmek daha güvenlidir.
Ethan

4
Worker_rlimit_nofile kullanın, ancak işlem başına açık dosya sayısı değerini ayarlamak için 'ulimit -n' çağrılmalıdır. Bu, init betiğinde daha iyi yapılır.
Ethan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.