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,一经查实,立即删除!

相关文章

低版本webview无法请求jquery ajax

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

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

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

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

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

HttpsURLConnection 返回 400

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

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…

MFC版链表实现稀疏多项式相加减

链表实现多项式运算&#xff08;加减&#xff09;MFC可视化版题目 设计一个一元稀疏多项式简单计算器。 基本要求 &#xff08;1&#xff09;输入并建立两个多项式&#xff1b; &#xff08;2&#xff09;多项式a与b相加&#xff0c;建立和多项式c&#xff1b; &#xff08;3&a…

WindTerm导出会话

WindTerm的session配置并无法被适用于其他软件中&#xff0c;所有的session保存在WindTerm安装路径下的profiles文件夹内&#xff0c;如果需要更新版本或回退&#xff0c;将所安装的版本覆盖即可&#xff0c;或是将profiles复制于新路径下。 图标闪烁设置、会话保存-导入导出 …

[官方] mysql 性能优化文档(中英文自译)

大家好&#xff0c;我是烤鸭&#xff1a; 根据官方文档翻译并精简部分内容。建议有时间的朋友下载原版查看&#xff0c;全文106页pdf&#xff0c;快的话1-2天就能看完。自己翻译的有些地方可能不完整&#xff0c;欢迎指正。官方pdf下载&#xff0c;需登录&#xff1a;https://w…

使用wiki.js部署团队知识库

1.安装NODE.JS 参考教程 https://xie.infoq.cn/article/6820ea5b625f4e163ccb76cec 1.1 下载nodejs安装包 http://nodejs.cn/download/ 1.2 上传到服务器soft目录后进行解压 # 解压 tar -xf node-v16.18.0-linux-x64.tar.xz # 删除安装包 rm -rf node-v16.18.0-linux-x64.ta…

系统架构设计师-软件水平考试(高级)-理论-操作系统

系统架构设计师-操作系统 前言&#xff1a; 之前文章发布后&#xff0c;发现还是有一定阅读量的&#xff0c;所以决定继续发一些思维导图。 思维导图首先以思维结构为主&#xff0c;其次以考试的内容进行一定的改动&#xff08;如本次&#xff0c;将“嵌入系统”放在了“操作系…

关于我的代码在课上第一时间没有运行出来这件事

日期&#xff1a;2018.11.15 博客期&#xff1a;024 星期四 今天上课老师又出题了&#xff0c;这次的题目是去利用文件的读写去完成文件的读写答题&#xff01;那为什么我没有第一时间做出来呢&#xff1f;原因我分析了以下几点&#xff1a; 1、我第一时间对题意没有准确的审视…

pytest+allure生成漂亮的报告+显示

一&#xff1a;环境准备 1.python3.62.windows环境3.pycharm4.pytest-allure-adaptor5.allure2.8.06.java1.8pytest-allure-adaptor快速安装 在cmd中输入 pip install pytest-allure-adaptor&#xff0c;回车 二&#xff1a;报告生成 第1步&#xff1a;下载allure.zip&#xff…

PC网页js调用本地应用程序

最近要现实一个在PC网页中实现点击按钮调用本地应用程序的功能 其实实现原理也非常简单&#xff0c; 首先注册一个本地注册表文件&#xff0c;指向本地应用程序路径 其次在网页中用js指向这个注册表文件&#xff0c;就可以实现网页调用本地应用程序 Windows Registry Editor V…

springboot 多数据源 读写分离 AOP方式

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享springboot读写分离配置。 环境&#xff1a; springboot 2.1.0.RELEASE 场景说明&#xff0c;目前的需求是 读数据源 * 2 写数据源 * 1 1. 配置文件 application.yml server:port: 8085 spring:application:name: test-d…

201771010137 赵栋 《第十二周学习总结》

一&#xff1a;理论部分 1.&#xff08;1&#xff09; 用户界面(User Interface)用户与计算机系统(各种程序)交互的接口 &#xff08;2&#xff09;图形用户界面(Graphical User Interface)以图形方式呈现的用户界面 2.AWT:Java 的抽象窗口工具箱&#xff08; Abstract WindowT…

多服务器 elk 搭建 [elasticsearch 7.0 ]

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下多服务器的elk搭建。 1. 流程规划 2. 执行搭建 最新的版本和对应下载地址可以在官网查询到 https://www.elastic.co/cn/products/ 2.1 elasticsearch 7.0 搭建 2.1.1 下载 wget https://artifacts.elastic.co/…

知乎问答:现在程序员的工资是不是被高估了?

对于优秀的程序员来说&#xff0c;薪酬的天花板犹如发际线&#xff0c;没有最高只有更高。而对于只想「混日子」的程序员来说&#xff0c;高薪很可能是泡沫&#xff0c;风一吹就碎。 一、程序员的工资真的高吗&#xff1f; 《2018年中国程序员生存状况报告》&#xff0c;来源&a…

lombok 的bug?lombok 导致 springmvc 使用 @RequestBody注解 接收 json数据 对象参数绑定失败

大家好&#xff0c;我是烤鸭&#xff1a; lombok 导致 springmvc 使用 RequestBody注解 接收 json数据 对象参数绑定失败。 环境版本&#xff1a; spring 5.x 1. 场景复现 问题出现在创建对象的属性名称。比如我有一个类中的属性值是 String aTest; 首字…