2009-12-09 8 views
0

J'ai été pris en train d'attraper SocketExceptions appartenant à des sous-espèces comme par exemple Tuyau cassé ou Connexion réinitialisée. La question est de savoir quoi faire avec les bâtards glissants une fois qu'ils sont attrapés.Quelles sont certaines SocketExceptions courantes et quelles en sont les causes?

Lesquels puis-je heureusement ignorer et qui nécessitent plus d'attention? Je suis à la recherche d'une liste de différentes SocketExceptions et de leurs causes.

Répondre

2

En termes de développement Web Java, un Broken pipe ou réinitialiser la connexion signifie essentiellement que l'autre côté a fermé la connexion. Cela peut être causé par le client en appuyant sur Echap alors que la demande est toujours en cours d'exécution ou en naviguant loin par lien/signet/barre d'adresse pendant que la demande est toujours en cours d'exécution. Vous voyez cette erreur particulière souvent dans les demandes de longue durée telles que les téléchargements de fichiers volumineux et les tâches inutiles de grande taille/lente (ce qui n'est pas bon pour l'utilisateur impatient, environ 3 secondes est vraiment le maximum). Dans de rares cas, il peut également être causé par un problème matériel/réseau, comme une panne de réseau côté serveur ou côté client.

Cette exception peut être levée lorsqu'un flush() ou un close() sur le flux de sortie de la réponse est appelé. Vous, en tant que serveur, ne pouvez rien faire contre. Vous ne pouvez pas en récupérer car vous ne pouvez pas (re) connecter le client en raison de restrictions de sécurité dans HTTP. Dans la plupart des cas, vous ne devriez même pas essayer, parce que c'est souvent la décision du client. Il suffit de l'ignorer ou de l'enregistrer pour des statistiques pures.

1

L'une des autres causes est généralement les paramètres de pile TCP/IP sur le système d'exploitation. Je ne l'ai pas encore essayé sur Linux, mais une plate-forme sur laquelle j'ai travaillé est le système d'exploitation Solaris 9/10 de Sun. L'idée de base est que Solaris dispose d'une pile TCP/IP réglable que vous pouvez régler pendant l'exécution de vos applications Web.

Donc, il y a deux paramètres que vous devriez être au courant

  • tcp_conn_req_max_q0 - file d'attente des poignées de main incomplètes
  • tcp_conn_req_max_q1 - file d'attente des poignées de main complètes
  • tcp_keepalive_interval - keepalive
  • tcp_time_wait_interval - le temps d'un segment TCP qui est considéré comme vivant dans Internet

Tous les paramètres ci-dessus affectent la quantité de charge peut la prise du système (dans une perspective de TCP/IP) et sur l'autre face affecte l'apparition de certains types de SocketExceptions - tels que ceux BalusC a souligné ci-dessus. Ceci est évidemment assez compliqué mais le point que j'essaie de faire est que le système d'exploitation sur lequel vous hébergez vos applications le plus souvent, vous offre des stratégies d'atténuation.

Questions connexes