Jetée IOException: Trop de fichiers ouverts

Je me suis Jetée sur un site autour de 100 requêtes/sec, avec nginx en frontal. Je viens de remarquer dans les journaux, à quelques minutes seulement après avoir fait une de déployer et de départ de la Jetée, que pour un peu de temps il a été spamming:

java.io.IOException: Too many open files
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:163)
    at org.mortbay.jetty.nio.SelectChannelConnector$1.acceptChannel(SelectChannelConnector.java:75)
    at org.mortbay.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:673)
    at org.mortbay.io.nio.SelectorManager.doSelect(SelectorManager.java:192)
    at org.mortbay.jetty.nio.SelectChannelConnector.accept(SelectChannelConnector.java:124)
    at org.mortbay.jetty.AbstractConnector$Acceptor.run(AbstractConnector.java:708)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Pour une minute ou deux.
J'ai fait un "lsof-u jetée" et vu des centaines de lignes de:

java    15892 jetty 1020u  IPv6          298105434        0t0       TCP 192.168.1.100:http-alt->192.168.1.100:60839 (ESTABLISHED)
java    15892 jetty 1021u  IPv6          298105438        0t0       TCP 192.168.1.100:http-alt->192.168.1.100:60841 (ESTABLISHED)
java    15892 jetty 1022u  IPv6          298105441        0t0       TCP 192.168.1.100:http-alt->192.168.1.100:60842 (ESTABLISHED)
java    15892 jetty 1023u  IPv6          298105443        0t0       TCP 192.168.1.100:http-alt->192.168.1.100:60843 (ESTABLISHED)

Où 192.168.1.100 est les serveurs IP interne.

Comme vous pouvez le voir, le nombre de fichiers ouverts par défaut de max de 1024. J'ai juste l'augmenter, mais je me demande pourquoi cela se produit en premier lieu? C'est dans la Jetée de nio socket accepteur, alors est-ce causé par une tempête de demandes de connexion?

Chaque prise est un fichier, de sorte que chaque connexion a un fichier (descripteur) même si c'est en attente. Ce qui ne demande généralement de faire, et combien de temps cela prend-il? Avec 100 requêtes/seconde sur la jetée, l'interrogation d'un local au serveur de bases de la prise de 2 s / demande que vous avez déjà 400 "fichiers".
La plupart de mes demandes ne prendre que quelques ms, bien que lorsque l'application démarre pour la première fois, ils peuvent prendre plusieurs secondes, ce qui est, je pense, ce qui s'y est passé. Le garbage collector également, à l'occasion de la "arrêtez le monde", une pause, ce qui provoque toutes les demandes à s'accumuler pendant une courte période de temps, l'origine de ce par intermittence. Je vais avoir à régler le GC plus tard, dans le temps, j'ai juste augmenté la limite.
Je suis arriver quelque chose de semblable dans Tomcat6 de temps en temps, d'abord pensé que c'était le système d'exploitation de jeter ses jouets. Aussi juste augmenté la limite comme un temp solution.

OriginalL'auteur John Smith | 2011-06-12