java.net.SocketException: Too many open files Spring Hibernate Tomcat

Ich habe eine Hibernate, Spring, Debian, Tomcat, MySql-stack auf einem Linode server in der Produktion mit einigen Kunden. Seine eine Feder-Multi-Tenant-Anwendung hostet Webseiten für über 30 Kunden.

Den Anwendungen beginnt gut, dann nach einer Weile, ich bin immer dieser Fehler:

java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
at java.net.ServerSocket.implAccept(ServerSocket.java:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:216)
at java.lang.Thread.run(Thread.java:662)

Bevor dieser Fehler wird geworfen, jedoch von nagios-Alarmen mir, dass die pings der server nicht mehr reagiert.

Zuvor hatte ich nginx als proxy, und immer war das nginx-Fehler pro Anfrage statt, und musste neu starten tomcat sowieso:

2014/04/21 12:31:28 [error] 2259#0: *2441630 no live upstreams while connecting to upstream, client: 66.249.64.115, server: abril, request: "GET /catalog.do?op=requestPage&selectedPage=-195&category=2&offSet=-197&page=-193&searchBox= HTTP/1.1", upstream: "http://appcluster/catalog.do?op=requestPage&selectedPage=-195&category=2&offSet=-197&page=-193&searchBox=", host: "www.anabocafe.com"
2014/04/21 12:31:40 [error] 2259#0: *2441641 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 200.74.195.61, server: abril, request: "GET /HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "www.oli-med.com"

Dies ist mein server.xml Stecker Konfiguration:

<Connector port="80" protocol="HTTP/1.1"
                maxHttpHeaderSize="8192"
               maxThreads="500" minSpareThreads="250"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"
               acceptorThreadCount="2" />

Ich versucht, die änderung der ulimit mit dieses tutorial ich war in der Lage zu ändern hard-limit für Datei-Deskriptoren für das user tomcat läuft, aber es hat nicht das problem zu beheben, wird die Anwendung immer noch nicht reagiert.

Das Letzte mal, dass ich musste den server neu starten, Es lief über 3 Stunden, hatte ich diese Werte für socked geöffnete verbindungen:

lsof -p TOMCAT_PID | wc -l
632 (more or less!! i did not write the exact number)

Diese zahlen plötzlich beginnt Sie zu wachsen.

Habe ich einige Anwendungen, die sehr ähnlich wie diese auf anderen Servern, der Unterschied ist, dass Sie eine Stand-Alone-version und dies ist ein Multi-tenancy-Architektur, merke ich, dass in dieser app ich bin immer diese Art von socket-verbindungen, die nicht auftreten, in der Stand Alone version in einer der anderen Anlagen:

java    11506 root  646u  IPv6 136862      0t0     TCP lixxx-xxx.members.linode.com:www->180.76.6.16:49545 (ESTABLISHED)
java    11506 root  647u  IPv6 136873      0t0     TCP lixxx-xxx.members.linode.com:www->50.31.164.139:37734 (CLOSE_WAIT)
java    11506 root  648u  IPv6 135889      0t0     TCP lixxx-xxx.members.linode.com:www->ec2-54-247-188-179.eu-west-1.compute.amazonaws.com:28335 (CLOSE_WAIT)
java    11506 root  649u  IPv6 136882      0t0     TCP lixxx-xxx.members.linode.com:www->ec2-54-251-34-67.ap-southeast-1.compute.amazonaws.com:19023 (CLOSE_WAIT)
java    11506 root  650u  IPv6 136884      0t0     TCP lixxx-xxx.members.linode.com:www->crawl-66-249-75-113.googlebot.com:39665 (ESTABLISHED)
java    11506 root  651u  IPv6 136886      0t0     TCP lixxx-xxx.members.linode.com:www->190.97.240.116.viginet.com.ve:1391 (ESTABLISHED)
java    11506 root  652u  IPv6 136887      0t0     TCP lixxx-xxx.members.linode.com:www->ec2-50-112-95-211.us-west-2.compute.amazonaws.com:19345 (ESTABLISHED)
java    11506 root  653u  IPv6 136889      0t0     TCP lixxx-xxx.members.linode.com:www->ec2-54-248-250-232.ap-northeast-1.compute.amazonaws.com:51153 (ESTABLISHED)
java    11506 root  654u  IPv6 136897      0t0     TCP lixxx-xxx.members.linode.com:www->baiduspider-180-76-5-149.crawl.baidu.com:31768 (ESTABLISHED)
java    11506 root  655u  IPv6 136898      0t0     TCP lixxx-xxx.members.linode.com:www->msnbot-157-55-32-60.search.msn.com:35100 (ESTABLISHED)
java    11506 root  656u  IPv6 136900      0t0     TCP lixxx-xxx.members.linode.com:www->50.31.164.139:47511 (ESTABLISHED)
java    11506 root  657u  IPv6 135924      0t0     TCP lixxx-xxx.members.linode.com:www->ec2-184-73-237-85.compute-1.amazonaws.com:28206 (ESTABLISHED)

Sind Sie eine Art automatisierte verbindungen, die ich Schätze.

Also meine Frage ist:

Wie kann ich feststellen, ob das problem ist, weil mein code, server, oder irgendeine Art von Angriff und mit welchem Ansatz würden Sie empfehlen, um dies herauszufinden ?

Danke im Voraus 🙂

  • maxThreads="10000" ist wirklich sehr optimistisch 😉
  • jaja! du hast Recht, wahrscheinlich vergessen, setzen Sie es zurück, nachdem ein test oder so etwas. Danke für den Hinweis it out.
  • Verändert es maxThreads="500" und aktualisiert die post. 🙂
InformationsquelleAutor Ernest | 2014-04-23
Schreibe einen Kommentar