Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.net.SocketTimeoutException:读取超时_Java_Tomcat_Sockets_Socketexception_Objectinputstream - Fatal编程技术网

java.net.SocketTimeoutException:读取超时

java.net.SocketTimeoutException:读取超时,java,tomcat,sockets,socketexception,objectinputstream,Java,Tomcat,Sockets,Socketexception,Objectinputstream,我有一个客户端-服务器架构的应用程序。客户 使用JavaWebStart和JavaSwing/AWT,sert使用HTTP服务器/Servlet和 雄猫。 通信是通过对象的序列化进行的,创建 ObjectOutput序列化字节数组并发送到服务器 分别调用ObjectInputStream和反序列化 应用程序遵循正确通信到某个特定位置 开始显示错误的并发时间 “SocketException读取超时”。当服务器调用该方法时会发生错误 我的servlet doPost方法中的ObjectInputS

我有一个客户端-服务器架构的应用程序。客户 使用JavaWebStart和JavaSwing/AWT,sert使用HTTP服务器/Servlet和 雄猫。 通信是通过对象的序列化进行的,创建 ObjectOutput序列化字节数组并发送到服务器 分别调用ObjectInputStream和反序列化

应用程序遵循正确通信到某个特定位置 开始显示错误的并发时间 “SocketException读取超时”。当服务器调用该方法时会发生错误 我的servlet doPost方法中的ObjectInputStream.getObject()

tomcat会变慢,错误开始减少服务器响应时间,直到崩溃时间,我必须在一切正常后重新启动服务器

有人经历过这个问题

客户端代码

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();
服务器代码

ObjectInputStream input = new ObjectInputStream(_request.getInputStream());
String method = input.readUTF();

parameters = input.readObject();

input.readObject()就是错误所在

您没有给我们提供太多的信息,特别是关于客户端的信息。但我怀疑客户方:

  • 未能设置内容长度标题(或将其设置为错误值)
  • 未能刷新输出流,和/或
  • 不关闭插座的输出侧

神秘的

根据你最新的问题,上面看起来没有一个。以下是其他几种可能性:

  • 出于某种原因,客户端要么在序列化过程中完全锁定,要么需要很长时间
  • 客户机和服务器之间存在导致问题的代理
  • 您遇到与负载相关的网络问题或网络硬件问题


另一种可能的解释是内存泄漏,而导致速度减慢的原因是GC在内存耗尽时花费了越来越多的时间。如果启用了GC日志,则会在这些日志中显示

我认为在高并发期间,Tomcat中设置的套接字超时过期,连接关闭。Tomcat对该连接的下一次读取大于服务器中指定的服务器套接字超时。
如果您想避免这个问题,您必须增加服务器端的超时时间,在您的情况下超时时间已经过期。但不可取。

顺便说一句,你没有提供足够的信息。您是否增加了Tomcat中连接的线程数?如果你这样做了,这肯定会发生

SocketException之前经过的时间是20分钟还是更长?(如果我回忆起tcp/ip套接字在没有连接活动时超时之前的标准等待时间)?在所有异常都告诉您“读取超时”之后,这是否也可能与web的异步性质有关?这是一个tcp linux参数?比如缓冲区内存大小、最大打开文件数还是其他?