Saya memiliki pengaturan VPS kecil dengan nginx. Saya ingin memeras kinerja sebanyak mungkin dari itu, jadi saya telah bereksperimen dengan optimasi dan pengujian beban.
Saya menggunakan Blitz.io untuk melakukan pengujian beban dengan MENDAPAT file teks statis kecil, dan mengalami masalah aneh di mana server tampaknya mengirim ulang TCP setelah jumlah koneksi simultan mencapai sekitar 2000. Saya tahu ini sangat jumlah besar, tetapi dari menggunakan htop server masih memiliki banyak waktu dan memori CPU, jadi saya ingin mencari tahu sumber masalah ini untuk melihat apakah saya dapat mendorongnya lebih jauh.
Saya menjalankan Ubuntu 14.04 LTS (64-bit) pada Linode VPS 2GB.
Saya tidak memiliki reputasi yang cukup untuk memposting grafik ini secara langsung, jadi inilah tautan ke grafik Blitz.io:
Berikut adalah hal-hal yang telah saya lakukan untuk mencoba dan mencari tahu sumber masalahnya:
- Nilai konfigurasi nginx
worker_rlimit_nofile
diatur ke 8192 - telah
nofile
ditetapkan ke 64000 untuk batas keras dan lunak untukroot
danwww-data
pengguna (seperti apa nginx berjalan) di/etc/security/limits.conf
tidak ada indikasi ada masalah
/var/log/nginx.d/error.log
(biasanya, jika Anda menjalankan batas deskriptor file, nginx akan mencetak pesan kesalahan yang mengatakannya)Saya memiliki pengaturan ufw, tetapi tidak ada aturan pembatasan tingkat. Log ufw menunjukkan tidak ada yang diblokir dan saya telah mencoba menonaktifkan ufw dengan hasil yang sama.
- Tidak ada kesalahan indikatif di
/var/log/kern.log
- Tidak ada kesalahan indikatif di
/var/log/syslog
Saya telah menambahkan nilai-nilai berikut ke
/etc/sysctl.conf
dan memuatnyasysctl -p
tanpa efek:net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
Ada ide?
EDIT: Saya melakukan tes baru, ramping hingga 3000 koneksi pada file yang sangat kecil (hanya 3 byte). Inilah grafik Blitz.io:
Sekali lagi, menurut Blitz semua kesalahan ini adalah kesalahan "Koneksi ulang TCP".
Berikut grafik bandwidth Linode. Perlu diingat ini adalah rata-rata 5 menit sehingga low pass sedikit difilter (bandwidth sesaat mungkin jauh lebih tinggi), tapi tetap saja, ini bukan apa-apa:
CPU:
I / O:
Inilah htop
akhir dari tes:
Saya juga menangkap beberapa lalu lintas menggunakan tcpdump pada tes yang berbeda (tetapi serupa), memulai penangkapan ketika kesalahan mulai muncul:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
Inilah file jika ada yang ingin melihatnya (~ 20MB): https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=sharing
Berikut grafik bandwidth dari Wireshark:
(Baris adalah semua paket, bilah biru adalah kesalahan TCP)
Dari interpretasi saya tentang penangkapan (dan saya bukan ahli), sepertinya bendera TCP RST berasal dari sumber pengujian beban, bukan dari server. Jadi, dengan asumsi bahwa ada sesuatu yang tidak salah pada sisi layanan pengujian beban, apakah aman untuk menganggap bahwa ini adalah hasil dari semacam manajemen jaringan atau mitigasi DDOS antara layanan pengujian beban dan server saya?
Terima kasih!
net.core.netdev_max_backlog
hingga 2000? Beberapa contoh yang saya lihat memiliki urutan besarnya lebih tinggi untuk koneksi gigabit (dan 10Gig).