Broken Pipe中的URI中的java.net.SocketException:这会导致高CPU使用率

时间:2016-03-22 08:12:59

标签: java sockets out-of-memory cpu-usage socketexception

我得到一个例外:

java.net.SocketException in URI: /com/ui/table/CMnTableCompJsp.jsp
Broken pipe

此错误的实例超过500个。 发生这种情况是因为服务器正在尝试写入已经关闭的连接。

500多个实例会导致高CPU利用率或OOM问题吗?

2 个答案:

答案 0 :(得分:0)

只有当你忽略它并且不要关闭套接字并继续尝试写入它时。

由于这似乎是一个JSP页面,因为浏览器关闭了连接,因此会出现异常。这可以在用户的​​控制下随时进行。可以说你根本不应该记录它。

答案 1 :(得分:0)

您可能想要退一步并问自己为什么要输出该消息。程序中的某个地方会捕获并打印出异常。 其中为什么

  1. 只有当你能够处理它(至少部分地)时才应该捕获异常,或者将其作为bug的指示进行报告。是否捕获并打印了处理损坏管道的异常代码?如果没有,修复该bug应该是你真正的任务。如果它正在处理破碎的pipie,你知道该程序表现良好,你没有什么可担心的。当您第一次尝试写入另一端已关闭的套接字时,JRE应该抛出异常。是否正确捕获 异常处理断开连接的代码?
  2. 只有当异常表明存在错误(堆栈跟踪是程序员说话)时,才应输出异常的堆栈跟踪。您似乎并不认为它表示错误,因此请修复您的日志记录代码。我怀疑你有大量的其他例外情况,你在这里问的原因是因为你不知道哪些是"重要的"的。
  3. 只有当该消息对某人有用时,才应输出报告事件的消息。你在这里问一个问题,关于你自己的程序输出的消息是否表明重要的事情表明该消息的当前形式是没用的。也许如果它说了更多信息("用户断开连接",例如),你就可以节省一些时间。