Cukup sering dalam penyelesaian masalah dan penyetelan hal-hal yang saya temukan tentang pengaturan kernel Linux berikut:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Selain fs.file-max
, net.ipv4.ip_local_port_range
, net.core.rmem_max
, net.core.wmem_max
, net.ipv4.tcp_rmem
, dan net.ipv4.tcp_wmem
, mereka tampaknya menjadi tombol-tombol penting untuk main-main dengan ketika Anda tuning kotak untuk tingkat tinggi concurrency.
Pertanyaan saya: Bagaimana saya bisa mengecek untuk melihat berapa banyak item dalam masing-masing antrian itu? Biasanya orang hanya mengaturnya sangat tinggi, tetapi saya ingin mencatat ukuran antrian itu untuk membantu memprediksi kegagalan di masa depan dan menangkap masalah sebelum mereka terlihat dengan cara yang terlihat oleh pengguna.
linux
kernel
networking
tcp
Colin Hostert
sumber
sumber
Jawaban:
Saya juga bertanya-tanya tentang hal ini dan termotivasi oleh pertanyaan Anda!
Saya telah mengumpulkan seberapa dekat saya bisa datang ke masing-masing antrian yang Anda daftarkan dengan beberapa informasi yang berkaitan dengan masing-masing. Saya menyambut komentar / umpan balik, setiap perbaikan pemantauan membuat segalanya lebih mudah untuk dikelola!
Akan menunjukkan jumlah koneksi global saat ini dalam antrian, Anda dapat memecah ini per port dan menempatkan ini dalam pernyataan exec di snmpd.conf jika Anda ingin polling dari aplikasi pemantauan.
Dari:
Ini akan menunjukkan seberapa sering Anda melihat permintaan dari antrian:
Dari:
http://linux.die.net/man/5/proc
File ini (hanya baca) memberikan jumlah file yang saat ini dibuka. Ini berisi tiga angka: Jumlah pegangan file yang dialokasikan, jumlah pegangan file gratis dan jumlah maksimum menangani file.
Jika Anda dapat membuat daftar layanan pengecualian (netstat -an | grep LISTEN) maka Anda dapat menyimpulkan berapa banyak koneksi yang digunakan untuk aktivitas sesaat:
Harus juga memantau (dari SNMP):
Mungkin juga menarik untuk mengumpulkan statistik tentang semua negara yang terlihat di pohon ini (didirikan / time_wait / fin_wait / etc):
Anda harus melakukan dtrace / strace sistem Anda untuk permintaan setockopt. Saya tidak berpikir statistik untuk permintaan ini dilacak sebaliknya. Ini sebenarnya bukan nilai yang berubah dari pemahaman saya. Aplikasi yang Anda gunakan mungkin akan meminta jumlah standar. Saya pikir Anda bisa 'membuat profil' aplikasi Anda dengan strace dan mengkonfigurasi nilai ini sesuai. (membahas?)
Untuk melacak seberapa dekat Anda dengan batas Anda harus melihat rata-rata dan maks dari bidang tx_queue dan rx_queue dari (secara teratur):
Untuk melacak kesalahan yang terkait dengan ini:
Harus juga memantau kumpulan 'penyangga' global (melalui SNMP):
sumber
Saya pikir Anda mungkin bisa mendapatkan data itu dengan SystemTap. Berikut ini adalah referensi manual Redhat (pdf) . Ada juga panduan pemula (pdf) .
Alat ini terlihat cukup fleksibel untuk memungkinkan Anda mendapatkan data itu, khususnya
probe::netdev.rx
terlihat seperti sesuatu yang akan memberi Anda informasi tentang entri yang masuk, sekarang Anda "hanya" perlu menemukan ukuran bersih antrian dalam buffer, atau sesuatu yang menghitung hal-hal meninggalkan antrian ...sumber