Au lieu de le faire wc -l /proc/net/tcp
, existe-t-il un moyen plus rapide de le faire?
J'ai juste besoin d'un nombre total de connexions TCP.
Au lieu de le faire wc -l /proc/net/tcp
, existe-t-il un moyen plus rapide de le faire?
J'ai juste besoin d'un nombre total de connexions TCP.
Réponses:
Si vous voulez simplement obtenir le numéro et n'avez pas besoin de détails, vous pouvez lire les données /proc/net/sockstat{,6}
. N'oubliez pas que vous devez combiner les deux valeurs pour obtenir le nombre absolu de connexions.
Si vous voulez obtenir les informations du noyau lui-même, vous pouvez utiliser NETLINK_INET_DIAG
pour obtenir les informations du noyau sans avoir à les lire/proc
Un moyen plus rapide? Cela produit une réponse en une fraction de seconde, en fait cela prend 0,009 secondes sur mon ordinateur!
Cherchez-vous un moyen qui nécessite moins de frappe? Dans ce cas, définissez un alias, par exemple
alias tcpcount="wc -l /proc/net/tcp"
Vous pouvez maintenant simplement saisir le pseudonyme, par exemple, tcpcount
c'est ce que j'ai utilisé dans mon exemple, pour obtenir ce numéro.
Saisissez la ligne ou ajoutez-la à votre .bashrc afin que l'alias soit défini à chaque connexion.
Pour un grand nombre de connexions, les opérations suivantes peuvent éventuellement s'exécuter un peu plus rapidement (et légèrement plus lentement pour un très petit nombre de connexions):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
Ou peut-être ...
awk 'END {print NR}' /proc/net/tcp
Ces deux solutions supposent que "wc" n'est pas très optimal pour simplement compter le nombre de lignes. Mes tests montrent que cette hypothèse est vraie.
Le premier part du principe que la commande tail est vraiment bonne pour éliminer les données inutiles, à tel point qu'elle compense la création d'un sous-shell supplémentaire et le travail supplémentaire sur les variables d'environnement. Il tire parti du fait que les lignes dans / proc / net / tcp sont déjà numérotées pour éliminer la nécessité de compter les lignes. La solution finale suppose que awk compte suffisamment bien pour compenser tout inconvénient dû au chargement d'un plus gros programme par rapport à la création de plusieurs processus. La solution awk a l'avantage supplémentaire de s'intégrer parfaitement dans une définition d'alias simple sur une seule ligne (ce qui offre des avantages supplémentaires en ce sens qu'aucun script n'est appelé, donc aucun processus de shell supplémentaire n'est prévu, ce qui donne un avantage supplémentaire en mili-secondes.)
/proc/net/tcp
. Vous pouvez essayer netstat -n -t | wc -l
, mais je suppose que netstat lit également à partir de/proc/net/tcp
netstat -nt
avec environ 180 000 connexions. Je ne vois aucune raison pour que ça soit si lent ... (la lecture /proc/net/tcp
est aussi très lente)
awk
approche est terriblement plus lente que wc
. tail
semble être à égalité avec wc
.
Utilisez la ss -s
commande pour obtenir la réponse détaillée.
ss -s