Alih-alih melakukan wc -l /proc/net/tcp
, apakah ada cara yang lebih cepat untuk melakukannya?
Saya hanya perlu jumlah total koneksi tcp.
Alih-alih melakukan wc -l /proc/net/tcp
, apakah ada cara yang lebih cepat untuk melakukannya?
Saya hanya perlu jumlah total koneksi tcp.
Jawaban:
Jika Anda hanya ingin mendapatkan nomornya dan tidak memerlukan detail, Anda dapat membaca datanya /proc/net/sockstat{,6}
. Perlu diingat bahwa Anda harus menggabungkan kedua nilai untuk mendapatkan jumlah koneksi absolut.
Jika Anda ingin mendapatkan informasi dari kernel itu sendiri, Anda dapat menggunakan NETLINK_INET_DIAG
untuk mendapatkan informasi dari kernel tanpa harus membacanya/proc
Cara yang lebih cepat? Dengan cara itu menghasilkan jawaban dalam sepersekian detik, bahkan butuh 0,009 detik di komputer saya!
Apakah Anda mencari cara yang tidak terlalu banyak mengetik? Dalam hal ini atur alias, mis
alias tcpcount="wc -l /proc/net/tcp"
Anda sekarang dapat memasukkan alias saja, mis. tcpcount
Adalah apa yang saya gunakan dalam contoh saya, untuk mendapatkan nomor ini.
Masukkan baris atau tambahkan ke .bashrc Anda sehingga alias akan didefinisikan setiap kali Anda masuk.
Untuk sejumlah besar koneksi, yang berikut ini mungkin dapat berjalan sedikit lebih cepat (Dan sedikit lebih lambat untuk jumlah koneksi yang sangat kecil):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
Atau mungkin ...
awk 'END {print NR}' /proc/net/tcp
Kedua solusi ini mengasumsikan bahwa "wc" tidak terlalu optimal untuk hanya menghitung jumlah garis. Pengujian saya menunjukkan bahwa asumsi ini benar.
Yang pertama bekerja pada premis bahwa perintah ekor benar-benar pandai membuang data yang tidak dibutuhkan, sedemikian rupa sehingga membuat untuk membuat sub-shell ekstra dan melakukan pekerjaan tambahan pada variabel lingkungan. Ini memanfaatkan fakta bahwa baris di / proc / net / tcp sudah diberi nomor untuk menghilangkan kebutuhan untuk menghitung baris. Solusi akhir mengasumsikan bahwa jumlah awk cukup baik untuk mengimbangi kerugian apa pun karena memuat program yang lebih besar vs menciptakan banyak proses. Solusi awk memiliki manfaat tambahan yang cocok dengan definisi alias satu baris sederhana (yang memberikan manfaat tambahan karena tidak ada skrip yang dipanggil, sehingga tidak ada proses shell tambahan yang bercabang, memberikan keuntungan mili-detik tambahan.)
/proc/net/tcp
. Anda dapat mencoba netstat -n -t | wc -l
, tetapi tebakan saya adalah bahwa netstat juga membaca dari/proc/net/tcp
netstat -nt
dengan sekitar 180.000 koneksi. Saya tidak melihat alasan mengapa itu harus sangat lambat ... (membaca /proc/net/tcp
juga sangat lambat)
awk
pendekatan ini lebih lambat daripada wc
. tail
tampaknya setara dengan wc
.
Gunakan ss -s
perintah untuk mendapatkan jawaban terperinci.
ss -s