Invece di fare wc -l /proc/net/tcp
, c'è un modo più veloce per farlo?
Ho solo bisogno di un conteggio totale delle connessioni TCPC.
Invece di fare wc -l /proc/net/tcp
, c'è un modo più veloce per farlo?
Ho solo bisogno di un conteggio totale delle connessioni TCPC.
Risposte:
Se vuoi solo ottenere il numero e non hai bisogno di dettagli, puoi leggere i dati /proc/net/sockstat{,6}
. Tieni presente che devi combinare entrambi i valori per ottenere il conteggio assoluto delle connessioni.
Se vuoi ottenere le informazioni dal kernel stesso, puoi usarle NETLINK_INET_DIAG
per ottenere le informazioni dal kernel senza doverle leggere/proc
Un modo più veloce? In questo modo produce una risposta in una frazione di secondo, in realtà ci vogliono 0,009 secondi sul mio computer!
Stai cercando un modo che richiede meno battitura a macchina? In tal caso impostare un alias, ad es
alias tcpcount="wc -l /proc/net/tcp"
Ora puoi semplicemente inserire lo pseudonimo, ad es. tcpcount
È quello che ho usato nel mio esempio per ottenere questo numero.
Inserisci la linea o aggiungila al tuo .bashrc in modo che l'alias venga definito ogni volta che accedi.
Per un numero elevato di connessioni, è possibile che ciò avvenga in modo leggermente più veloce (e leggermente più lento per un numero molto piccolo di connessioni):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
O forse ...
awk 'END {print NR}' /proc/net/tcp
Entrambe queste soluzioni presuppongono che "wc" non sia ottimale per il solo conteggio del numero di righe. I miei test mostrano che questo presupposto è vero.
Il primo si basa sul presupposto che il comando tail è davvero efficace nello scartare i dati non necessari, al punto da compensare la creazione di una sotto-shell aggiuntiva e il lavoro extra sulle variabili di ambiente. Sfrutta il fatto che le righe in / proc / net / tcp sono già numerate per eliminare la necessità di contare le righe. La soluzione finale presuppone che awk conti abbastanza bene da compensare qualsiasi svantaggio dovuto al caricamento di un programma più grande rispetto alla creazione di più processi. La soluzione awk ha l'ulteriore vantaggio di adattarsi perfettamente a una semplice definizione di alias a una riga (che offre ulteriori vantaggi in quanto non vi è alcun script chiamato, quindi nessun processo di shell aggiuntivo biforcato, che offre un ulteriore vantaggio di pochi secondi).
/proc/net/tcp
. Puoi provare netstat -n -t | wc -l
, ma la mia ipotesi è che anche netstat legga da/proc/net/tcp
netstat -nt
con circa 180.000 connessioni. Non vedo alcun motivo per cui dovrebbe essere così lento ... (anche la lettura /proc/net/tcp
è molto lenta)
awk
approccio è terribilmente più lento di wc
. tail
sembra essere alla pari wc
.
Utilizzare il ss -s
comando per ottenere la risposta dettagliata.
ss -s