Gunakan perintah:
ss -neopt state established
Ini hanya akan menampilkan sesi TCP di ESTABLISHED
status, tidak perlu menyalurkan ke perintah lain, jadi sangat cepat.
ss
lebih baik dari netstat
karena netstat
yang lebih lama hanya membaca dari procfs yang tunduk pada kunci file. ss
benar-benar membuat kueri di dalam kernel yang ditangani oleh penjadwal kernel dan selalu mengembalikan informasi yang akurat.
Menggunakan /proc untuk mengurangi beban kerja
Saya suka mengakses variabel kernel langsung melalui /proc
. Ini sangat efisien, cepat, dan ramah sistem.
Ada file pseudo (tabel variabel kernel) bernama /proc/net/tcp
wherekernel menyimpan daftar koneksi dan mendengarkan TCP. Bidang ke-6, disebut st
untuk negara bagian dapat berisi 0A
untuk entri mendengarkan dan 01
untuk koneksi yang dibuat.
Menghitung TCP dibentuk koneksi:
Dengan menggunakan grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Dengan menggunakan awkawk </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'
atau
awk </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
Dengan menggunakan sedsed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
Waktu eksekusi
Karena pertanyaan ini berarti sistem beban kerja tinggi. Saya telah melakukan sedikit bangku:
Method Answer by Milliseconds grep Techno 2.48 awk no regexp ($4=="01") 2.51 sed | wc 2.67 awk with regexp 2.93 ss -neopt state established | wc -l Suprjami 15.14 lsof -i tcp -s tcp:ESTABLISHED Tonioc 25055.00
Jawaban Ok Tonioc sangat lambat, tetapi sangat menarik dengan verbositasnya. Jadi jelas tidak bisa digunakan pada sistem beban kerja tinggi.
Bangku ini membiarkan Anda melihat bahwa jika ss
adalah alat khusus yang sangat berguna, meminta /proc
variabel bisa jauh lebih cepat.
Periksa juga:527875.
netstat + grep
adalah opsi yang bagus dan sederhana untuk beberapa koneksi tetapi jika Anda memiliki banyak koneksi, saya akan merekomendasikan ss
seperti yang direkomendasikan di nixCraft.
Misalnya:ss -s
Total: 78 (kernel 79)
TCP: 31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16
Transport Total IP IPv6
* 79 - -
RAW 0 0 0
UDP 4 2 2
TCP 31 2 29
INET 35 4 31
FRAG 0 0 0