java.net.SocketTimeoutException: Read timed out
Ich habe eine Anwendung mit client-server-Architektur. Der client
verwenden von Java Web Start mit Java-Swing /AWT und die sert verwendet HTTP-server /Servlet mit
Tomcat.
Die Kommunikation ist aus der Serialisierung von Objekten, erstellen einer
ObjectOutput ein byte-array serialisiert und an den server senden
jeweils genannt der ObjectInputStream und deserialisiert.
Die Anwendung folgt richtig zu kommunizieren, um eine bestimmte
Zeit der Gleichzeitigkeit, wo beginnen, den Fehler anzeigen
"SocketException read timeout". Der Fehler passiert, wenn der server die Methode aufrufen
ObjectInputStream.getObject() in meinem servlet doPost Methode.
Den tomcat wird kommen, langsam, und die Fehler beginnen zu sinken server-Antwort Zeit, bis der Absturz die Zeit, wo ich muss den server neu starten und danach funktioniert alles.
Ging jemand über dieses problem ?
Client-Code
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
ObjectOutputStream oss = new ObjectOutputStream(os);
oss.writeUTF("protocol header sample");
oss.writeObject(_parameters);
oss.flush();
oss.close();
Server-Code
ObjectInputStream input = new ObjectInputStream(_request.getInputStream());
String method = input.readUTF();
parameters = input.readObject();
Eingang.readObject() ist, wo der Fehler ist
- Könnten Sie die post-code?
- Ist die Menge der Zeit, die vergeht, bevor die SocketException 20 Minuten oder länger? (wenn ich mich Recht erinnere die standard-Zeit, die eine tcp/ip-socket wartet, bevor es mal aus, wenn es keine Verbindung der Aktivität) ? Nachdem alle die Ausnahme ist, sagen Sie "Zeitüberschreitung beim Lesen" könnte auch diese haben etwas zu tun mit der asynchronen Natur des web?
- Es ist ein linux tcp-parameter? Wie Puffer mem-Größe, max geöffneten Dateien oder andere?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie noch nicht die uns viel Informationen, vor allem über die client-Seite. Aber mein Verdacht ist, dass die client-Seite ist:
Geheimnisvoll.
Basierend auf den aktualisierten Frage, wie sieht es keine der oben genannten. Hier sind noch ein paar andere Möglichkeiten:
Weitere mögliche Erklärung ist, dass Sie einen Speicherverlust haben, und dass die Verlangsamung wird verursacht durch die GC nehmen mehr und mehr Zeit, da Sie nicht genuegend Arbeitsspeicher ausführen. Dies wird zeigen, bis in den GC-logs, wenn du Sie hast aktiviert.
Ich denke, Bei hoher Parallelität, die Socket-Timeout in Tomcat ist Abgelaufen und die Verbindung wird geschlossen. Die nächsten Lesen von Tomcat für die Verbindung ist größer als der server-socket-timeout angegeben in der server.
Wenn Sie möchten, um dieses problem zu vermeiden, müssen Sie erhöhen Sie den timeout auf dem server-Seite, die abgelaufen ist, in Ihrem Fall. Aber nicht ratsam.
BTW, du hast nicht genug Informationen geben. Hast du erhöhen, die keine threads für die Verbindung in Tomcat? Wenn du das getan hast, das würde sicherlich passieren.