org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

大家好,我是烤鸭:
    又是采坑实录。

    异常如下:

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipeat org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:815)at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:720)at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:391)at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:369)at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)at org.springframework.util.StreamUtils.copy(StreamUtils.java:124)at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.writeContent(ResourceHttpRequestHandler.java:411)at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:242)at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856)at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841)at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Broken pipeat sun.nio.ch.FileDispatcherImpl.write0(Native Method)at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)at sun.nio.ch.IOUtil.write(IOUtil.java:65)at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1259)at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:670)at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:450)at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:388)at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:644)at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:119)at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:235)at org.apache.coyote.Response.doWrite(Response.java:541)at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:351)... 58 more

当时出现这个问题的时候,前台导出excel然后一直卡在这,没反应。
生产环境看了一下,并没有异常,cpu和内存也都正常。
猜想可能是tomcat设置的连接时间太短,在响应之前tomcat就关闭了连接。

关于tomcat参数设置,可以参考官方文档

tomcat 8.5官方文档
http://tomcat.apache.org/tomcat-8.0-doc/config/http.html

connectionTimeout    
The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented. Use a value of -1 to indicate no (i.e. infinite) timeout. The default value is 60000 (i.e. 60 seconds) but note that the standard server.xml that ships with Tomcat sets this to 20000 (i.e. 20 seconds). Unless disableUploadTimeout is set to false, this timeout will also be used when reading the request body (if any).
接受连接后,此连接器将等待请求URI行的毫秒数。使用值-1表示没有(即无限)超时。默认值为60000(即60秒),但请注意Tomcat附带的标准server.xml将其设置为20000(即20秒)。除非disableUploadTimeout设置为false,否则在读取请求主体(如果有)时也将使用此超时。

keepAliveTimeout    
The number of milliseconds this Connector will wait for another HTTP request before closing the connection. The default value is to use the value that has been set for the connectionTimeout attribute. Use a value of -1 to indicate no (i.e. infinite) timeout.
此连接器在关闭连接之前等待另一个HTTP请求的毫秒数。默认值是使用为connectionTimeout属性设置的值。使用值-1表示没有(即无限)超时。

maxConnections    
The maximum number of connections that the server will accept and process at any given time. When this number has been reached, the server will accept, but not process, one further connection. This additional connection be blocked until the number of connections being processed falls below maxConnections at which point the server will start accepting and processing new connections again. Note that once the limit has been reached, the operating system may still accept connections based on the acceptCount setting. The default value varies by connector type. For BIO the default is the value of maxThreads unless an Executor is used in which case the default will be the value of maxThreads from the executor. For NIO and NIO2 the default is 10000. For APR/native, the default is 8192.
服务器在任何给定时间接受和处理的最大连接数。达到此数量后,服务器将接受但不处理另一个连接。此附加连接将被阻止,直到正在处理的连接数低于maxConnections,此时服务器将再次开始接受和处理新连接。请注意,一旦达到限制,操作系统仍可以接受基于acceptCount设置的连接。默认值因连接器类型而异。对于BIO,缺省值是maxThreads的值,除非使用Executor,在这种情况下,缺省值将是执行程序中maxThreads的值。对于NIO和NIO2,默认值为10000.对于APR / native,默认值为8192。

找到如下几个参数,在tomcat目录下conf中的server.xml修改:
看一下原来我们的server.xml的配置:

<Connector port="8080" maxHttpHeaderSize="8192" executor="tomcatThreadPool"   protocol="org.apache.coyote.http11.Http11NioProtocol" enableLookups="false" redirectPort="8012" acceptCount="1000" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true"  compression="on " compressionMinSize="1"  noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/plain,text/css,text/xml,text/javascript,application/octet-stream" URLEncoding="UTF-8"  />

改之后:

<Connector port="8080" maxHttpHeaderSize="8192" executor="tomcatThreadPool"   protocol="org.apache.coyote.http11.Http11NioProtocol" enableLookups="false" redirectPort="8012" acceptCount="1000" connectionTimeout="60000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true"  compression="on " compressionMinSize="1"  noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/plain,text/css,text/xml,text/javascript,application/octet-stream" URLEncoding="UTF-8" keepAliveTimeout="60000"/>

修改了 connectionTimeout 和 keepAliveTimeout 的值:
事实证明,没什么用。

回到最开始的地方,导出excel卡,检查一下excel的sql执行时间。如下图。

82s.....简直不能玩了。
后来改了sql,加了索引,把时间改成6s.虽然还是很慢...问题先解决了吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] word-wrap、word-break和white-space有什么区别?

[css] word-wrap、word-break和white-space有什么区别&#xff1f; word-wrap标明是否允许浏览器再单词内进行断句normal 只允许在断字点换行 默认值break-word 在长单词或这url地址内部进行换行word-break标明怎么样进行单词内的断句normal 默认值break-all 允许在单词内换行k…

Redis免费客户端 Another Redis DeskTop Manager 下载地址及安装教程

下载及安装教程地址&#xff1a;GitHub - qishibo/AnotherRedisDesktopManager: &#x1f680;&#x1f680;&#x1f680;A faster, better and more stable redis desktop manager [GUI client], compatible with Linux, Windows, Mac. Whats more, it wont crash when loadi…

[css] 说说你对字母“X“在CSS中有什么作用?

[css] 说说你对字母"X"在CSS中有什么作用&#xff1f; 可以用作关闭按钮叉叉X的底部与文本对齐的基线位置相同个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

JavaScript文字转图片

非常感谢这位博主提供的代码&#xff0c;以下只做代码记录 博文转载地址&#xff1a;https://blog.csdn.net/qq_30100043/article/details/76549377//绘制文字到canvas&#xff0c;判断换行位置&#xff0c;和设置canvas高度 function canvasWrapText(options) {var settings …

mysql 内置功能 函数 date_format函数

创建数据库db12 create database db12 charsetutf8; use db12; 准备表和记录 CREATE TABLE blog (id INT PRIMARY KEY auto_increment,NAME CHAR (32),sub_time datetime ); 插入记录 INSERT INTO blog (NAME, sub_time) VALUES(第1篇,2015-03-01 11:31:21),(第2篇,2015-03-11 …

低版本webview无法请求jquery ajax

大家好&#xff0c;我是烤鸭&#xff1a; 又来踩坑了。 1. 场景复现 有反馈我们的H5页面&#xff0c;无法正确显示页面。就类似下图这样&#xff0c;ajax没法请求到数据。 之前测试的时候是在web端做的测试&#xff0c;用安卓7.0和8.0的手机都试了一下&#xff0c;是没…

[css] CSS3中的transition是否可以过渡opacity和display?

[css] CSS3中的transition是否可以过渡opacity和display&#xff1f; transition过渡display是有一个前提条件: 浏览器渲染是在每一帧的最后&#xff0c;每一帧都会执行以下操作:js执行2.style加持3.layout4.paint5.composite在js执行过程中&#xff0c; 遇到DOM操作&#xff…

Ubuntu 无法应用原保存的显示器配置

Ubuntu开机之后页面出现&#xff1a;无法应用原保存的显示器配置所选模式均不匹配可能的模式&#xff1a;为 CRTC 63 尝试模式CRTC 63&#xff1a;尝试 800x60060Hz 模式输出在 1366x76860Hz (通过 0)CRTC 63&#xff1a;尝试 2560x160060Hz 模式输出在 1366x76860Hz (通过 0)C…

由excel导出引起的cpu 100% 和gc 的问题

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由excel导出 导致的cpu飙升200%&#xff0c;jvm 内存不足。 1. 场景复现 前端页面导出Excel&#xff0c;之前导出4,5W条数据都没什么问题的。 今天业务突然反馈说导出不了了&#xff0c;我试着导出了2w数据&#xff0…

[css] 说下background-color:transparent和opacity:0的区别是什么?

[css] 说下background-color:transparent和opacity:0的区别是什么&#xff1f; background-color:transparent: 只是把背景色设置为透明&#xff0c;并不会影响元素中的内容。可以利用 transparent 进行三角、扇形的设置。opacity: 0: 会影响整个元素&#xff0c;元素的内容也会…

win11耳机和扬声器怎么分开控制音量?

win11耳机和扬声器怎么分开控制音量&#xff1f; 有时候有这种需求&#xff0c;在办公位置工作听耳机&#xff0c;拔掉耳机后&#xff0c;扬声器需要自动禁止声音 1&#xff0c;搜索并打开Realtek Audio Console 2&#xff0c;点击左下角“设备高级设置”&#xff0c;播放设备…

ngix莫名挂掉 signal process started

大家好&#xff0c;我是烤鸭&#xff1a; 又到了采坑实录。ngix莫名挂掉 error.log一直出现 signal process started 查看了access.log和error.log access.log&#xff1a; 43.245.218.208 - - [06/Jan/2019:18:08:43 0800] "GET / HTTP/1.1" 200 555 "-"…

[css] z-index有时不起作用的原因是什么?怎么解决?

[css] z-index有时不起作用的原因是什么&#xff1f;怎么解决&#xff1f; 根元素 (HTML),z-index 值不为 "auto"的 绝对/相对定位&#xff0c;一个 z-index 值不为 "auto"的 flex 项目 (flex item)&#xff0c;即&#xff1a;父元素 display: flex|inline…

Docker安装nacos

docker安装nacos docker创建nacos容器 第一种&#xff08;不推荐&#xff0c;因为不能连接数据库&#xff0c;进行持久化&#xff09; #搜索可以使用的镜像 docker search nacos #拉取镜像 docker pull nacos/nacos-server# 运行nacos docker run \ --name nacos -d \ -p …

HttpsURLConnection 返回 400

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由 HttpsURLConnection 引起的返回值400的错误。 1. 场景复现 今天线上调用第三方接口的时候突然报错了。 严格来说也不是报错&#xff0c;就是发的请求不通了&#xff0c;http报400的错误。 问了下对接方&…

[css] 你有了解css计数器(序列数字字符自动递增)吗?如何通过css的content属性实现呢?

[css] 你有了解css计数器&#xff08;序列数字字符自动递增&#xff09;吗&#xff1f;如何通过css的content属性实现呢&#xff1f; counter-reset:设置计数器 counter-reset: count 0 /* 计数器从1开始 */ counter-increment: 递增数值 counter-increment: count 2 /* 用于c…

npm、webpack、vue-cli 快速上手版

Node.js npm 什么是Node.js 以及npm 简单的来说 Node.js 就是运行在服务端的JavaScript&#xff0c;基于Chrome V8 引擎的。 npm 是Node.js 的包管理工具。 npm的安装和更新 Node.js下载安装 Node.js 官网下载安装。npm自带的包管理工具。 查看安装版本信息&#xff1a; -…

idea修改maven helper右键run maven的位置

idea修改 maven helper右键run maven的位置 现在调整到最上面后&#xff0c;进行maven的命令操作就非常的方便了&#xff01;

springboot webservice cxf 客户端调用

大家好&#xff0c;我是烤鸭&#xff1a; 这篇文章分享的是xcf webservice接口调用。如果接口提供方要求是webservice调用的话&#xff0c;可以参考这篇内容。 1. pom文件 <dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-front…

[css] 说说你对css的will-change属性的理解,它有什么作用呢?

[css] 说说你对css的will-change属性的理解&#xff0c;它有什么作用呢&#xff1f; 告诉浏览器,这个元素的某些属性可能会频繁变动触发回流&#xff0c;要求浏览器给予资源进行优化&#xff0c;一般浏览器会给这个元素单独生成一个图层渲染,gpu加速等提前优化手段 不应过度使…