GNU/Linux >> Belajar Linux >  >> Linux

Dapatkan jumlah koneksi yang dibuat TCP

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 grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Dengan menggunakan awk
awk  </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 sed
sed  </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  

Linux
  1. Dapatkan bilangan bulat langit-langit dari angka di linux (BASH)

  2. Cara hanya mendapatkan jumlah baris file

  3. Bagaimana cara mendapatkan jumlah disk fisik di Linux?

  1. Cara mendapatkan nomor tampilan yang ditugaskan oleh X

  2. Bagaimana saya bisa menemukan jumlah total koneksi TCP untuk port tertentu dan periode waktu berdasarkan IP?

  3. Apa yang membatasi jumlah maksimum koneksi di server Linux?

  1. Cara mendapatkan nomor seri hard disk menggunakan Python

  2. Bagaimana cara mendapatkan jumlah CPU di Linux menggunakan C?

  3. Periksa Jumlah koneksi aktif pada port 80?