Comment obtenir un journal réseau Linux?

14

Nous avons un serveur java fonctionnant sous linux sur un port spécifique qui accepte des connexions persistantes pour des milliers et des milliers d'utilisateurs. Récemment, nos clients n'ont pas pu se connecter avec une erreur de temporisation. Nous pensons que le trafic devient trop élevé, mais notre journal java montre en fait que peu de personnes sont connectées par seconde.

Nous soupçonnons que cela pourrait être que trop de gens essaient en même temps et qu'ils sont fondamentalement abandonnés au niveau du système d'exploitation et donc le programme java n'a jamais vraiment la chance d'accepter la connexion? Existe-t-il une sorte de connexion à Linux qui peut montrer à quelqu'un qui essaie de toucher un socket?

erotsppa
la source

Réponses:

8

iptables -I INPUT -p tcp --dport some_port -j LOGpuis
tail -f /var/log/messages
ensuite, pour voir combien de données a été frappé par cette règle: iptables -L -n -v
Ou vous pouvez exécuter tcpdump et grep les ports.

James L
la source
2
+1. Une légère modification pourrait fonctionner mieux pour attraper seulement les nouvelles tentatives de connexion: iptables -I INPUT -p tcp --dport some_port -m state --state NEW. Notez que sauf si vous êtes intéressé par les détails de chaque tentative de connexion, l'omission -j LOGévite de spammer le fichier journal du système avec de nombreuses données inutiles.
Steven lundi
3

Quand j'ai des problèmes de réseau vraiment désagréables, j'ai tendance à déclencher le wirehark . Pour moi, il n'y a pas de meilleur outil de diagnostic de réseau quand je dois passer aux détails. Et ne vous inquiétez pas si vous ne pouvez pas l'installer sur la boîte source ou de destination; vous pouvez exécuter tcpdump -wpour écrire des données de paquets dans un fichier au début et / ou au point de terminaison, et alimenter le fichier en wirehark sur une autre boîte à votre convenance.

Chapelier Fou
la source
Ouais, je recommanderais de mettre un filtre dessus commetcpdump -nS dst port <some port>
gravyface
0

Ce serait bien de voir précisément ce que vos threads Java obtiennent au niveau du socket. En même temps, vous voudriez corréler cela avec les informations du réseau OS. Jetez un œil à AppFirst. Ils peuvent faire ce genre de chose.

IAPaddler
la source
0
watch -n1 -d "netstat -an | grep ESTABLISHED | wc -l"

affiche les connexions actuellement établies.

Comparez cela avec vos ulimitparamètres actifs , et bien sûr avec le nombre maximum de connexions que votre application Java peut gérer.

sjas
la source