java 问题日志
Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:351)
at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:784)
at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:687)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:386)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:364)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:638)
at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:253)
at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:255)
at org.docx4j.openpackaging.io3.stores.ZipPartStore.saveJaxbXmlPart(ZipPartStore.java:305)
... 106 common frames omitted
解决方法
ClientAbortException异常通常发生在客户端关闭了与服务器的连接,但服务器仍在尝试写数据到这个连接时。这个异常是由Tomcat或其他Servlet容器抛出的,意味着服务器端尝试写入数据,但是没有客户端来接收这些数据。
常见原因包括:
- 用户手动停止了浏览器加载页面。
- 网络问题导致客户端与服务器的连接中断。
- 客户端超时了,没有在规定时间内发送额外的数据请求。
解决方法:
- 检查和优化应用程序的代码,确保不会在客户端已经关闭连接的情况下尝试写入数据。
- 捕获
ClientAbortException异常,并适当地处理它。例如,可以简单地记录一条消息,然后忽略这个异常,或者进行必要的清理工作。
- 如果这个异常是正常的操作一部分,可以考虑在日志中记录这个异常,但不需要采取进一步的行动。
- 如果是因为网络问题导致的,需要检查网络连接,并确保网络稳定。
- 如果是因为客户端超时,可以考虑增加客户端的超时时间。
请注意,这个异常通常不是严重的错误,可能只需要在日志中记录一下,并且确保服务器端的行为是预期的。
不重启服务器的临时解决方法
在服务器上调用jvm gc一下
查找Java进程的PID
jps -l
1234 xxx.jar
假设Java进程的PID是1234
发送GC命令
jcmd 1234 GC.run
到这一步执行成功就可以临时解决问题了
查看GC的详细信息
jcmd 1234 GC.class_histogram
jcmd 1234 GC.heap_info
jcmd 1234 GC.finalizer_info