3 votes

Traquer les erreurs de "réinitialisation de la connexion" sous Linux

Je gère un grand nombre de téléchargements simultanés (environ 500 par serveur) en utilisant Java.

Tous les fichiers sont téléchargés depuis Amazon S3, et le serveur de téléchargement est une instance EC2 m1.large.

Occasionnellement, 2 ou plusieurs des flux seront simultanément être cassé, ce qui entraîne une java.net.SocketException. Parfois, jusqu'à 10 flux peuvent être interrompus simultanément.

J'ai les mêmes résultats en téléchargeant depuis les serveurs Amazon S3 et Akamai. Cela ne se produit que lorsque la charge commence à être assez élevée (200 téléchargements simultanés ou plus).

Je suis bien dans les limites normales du CPU, de la charge réseau et de la mémoire.

Je soupçonne fortement que le problème se situe sur mon serveur, et non sur celui de S3 et d'Akamai. Comment puis-je déboguer ce problème et en trouver la cause ?

2voto

jerone Points 3027

Vous pourriez capturer le trafic avec tcpdump et regardez ça après la rupture des connexions. Wireshark, par exemple, dispose d'une option "suivre le flux TCP" qui vous permet d'isoler facilement une rupture une fois que vous avez localisé le dernier paquet.

Il se peut qu'il y ait encore beaucoup de données à traiter, mais comme vous dites que cela ne se produit que lorsque la charge est assez élevée, je ne pense pas qu'il y ait un moyen de contourner cela.

Pour commencer, vous pouvez examiner les erreurs signalées par l'interface réseau (par l'intermédiaire de l'outil de gestion de l'interface réseau). ifconfig ) et voyez si ce nombre augmente de manière significative lorsque les connexions sont interrompues.

2voto

Y a-t-il un firewall/NAT sur le chemin entre vous et S3 ?

Pourriez-vous capturer simultanément ( tcpdump -w file -s 0 ) le trafic en 2 points - entre votre serveur et le pare-feu, et entre le pare-feu et S3, puis comparez les dumps ? Avant de lancer tcpdump, assurez-vous que l'horloge est précisément synchronisée en utilisant NTP sur les hôtes de capture.

Comparez ensuite les deux captures de réseau au moment où la connexion a été interrompue.

J'ai eu un problème insaisissable similaire, et en comparant les vidages de trafic réseau, j'ai découvert qu'il était dû au fait que SACK était actif sur mon serveur Linux, mais qu'il était mal interprété par le pare-feu Cisco ASA qui gérait le trafic en provenance d'Internet.

J'ai dû désactiver SACK en utilisant sysctl ( net.ipv4.tcp_sack ).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X