我有一个具有客户端服务器架构的应用程序。客户端
将 Java Web Start 与 Java Swing / 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() 是错误所在
您没有向我们提供太多信息,尤其是有关客户端的信息。但我怀疑客户端是:
- 未能设置 Content-length 标头(或将其设置为错误的值),
- 未能刷新输出流,和/或
- 没有关闭插座的输出侧。
神秘。
根据您更新的问题,以上情况似乎都不是。以下是其他几种可能性:
- 由于某种原因,客户端要么在序列化期间完全锁定,要么花费很长时间。
- 客户端和服务器之间存在导致问题的代理。
- 您遇到与负载相关的网络问题或网络硬件问题。
另一种可能的解释是内存泄漏,并且随着内存耗尽,GC 花费的时间越来越长,从而导致速度减慢。如果您启用了它们,这将显示在 GC 日志中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)