此ClientAbortException来自何处



我有一个Spring Boot应用程序,它经常在日志中显示这个错误:

[xec-104]ERROR异常处理ErrorPage[errorCode=0,location=/ERROR]org.apache.catalina.connecter.ClientAbortException:java.io.io异常:对等方在重置连接org.apache.catalina.connecter.OutputBuffer.doFlush(OutputBuffer.java:340)网址:org.apache.catalina.connecter.OutputBuffer.flash(OutputBuffer.java:303)在org.apache.catalina.connecter.CoyoteOutputStream.flash(CoyoteOutputStream.java:109)com.fasterxml.jackson.core.json.UTF8JsonGenerator.flash(UTF8Json Generator.java:1048)com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:953) 在org.springframework.http.coverter.json.AbstractJackson2HttpMessageConverterr.writeInternal(AbstractJackson2HttpMessageConverter.java:285)位于org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:100)位于org.springframework.web.servlet.mvc.method.annation.AbstractMessageConverterterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:231)org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProce位于的ssor.handleReturnValue(HttpEntityMethodProcessor.java:203)org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandl位于的erMethod.invokeAndHandle(Servlet InvocableHandlerMethod.java:132)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandler位于的Adapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandler位于的Adapter.handleInternal(RequestMappingHandlerAdapter.java:738)org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServletlet.java:963)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServletet.java:897)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java: 861),位于javax.servlet.http.HttpServlet.service(HttpServlet.java:622)在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)在javax.servlet.http.HttpServlet.service(HttpServlet.java:729)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(应用nFilterChain.java:230)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:726)org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher她的。java:394)org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:395) 在org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254) 在org.apache.catalina.core.StandardHostValv.invoke(StandardHostValv.java:177) 在org.apache.catalina.vals.ErrorReportValve.ioke(ErrorReportValve.java:79)在org.apache.catalina.core.StandardEngineValv.invoke(StandardEngineValve.java: 87)org.apache.catalina.connecter.CoyoteAdapter.service(Coyotedapter.java:349)在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java: 66)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)java.util.concurrent.ThreadPoolExecutior.runWorker(ThreadPoolExecutior.java:1142)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)引起原因:java.io.IOException:对等方重置连接位于sun.nio.ch.FileDispatcherImpl.write0(本机方法)位于sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)位于sun.nio.ch.IUtil.writeFromNativeBuffer(IOUtil.java:93)在sun.nio.ch.IUtil.write(IOUtil.java:65)位于sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)网址:org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)在org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)在org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1221)org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapper Base.java:451)org.apache.tomcat.util.net.SocketWrapperBase.flash(SocketWrapper Base.java:441)org.apache.coyote.http11.Http11OutputBuffer.flushBuffer(Http11OutputBuffer。java:514)org.apache.coyote.http11.Http11OutputBuffer.flash(Http11OutputBuffer.java:243)org.apache.coyote.http11.Http11Processor.flash(Http11Processor.java:1495)网址:org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:284)网址:org.apache.coyote.Response.action(Response.java:167)网址:org.apache.catalina.connecter.OutputBuffer.doFlush(OutputBuffer.java:336)…41个普通帧省略

正如您所看到的,堆栈跟踪不会显示我的应用程序中的任何内容。这种异常完全发生在基础结构中。这意味着什么?我该如何重现?此外,我不明白为什么在堆栈跟踪中有杰克逊。我的应用程序中没有任何JSON输出。

最后,我想了解我的申请是否有问题。如果是,请修复它。如果没有,我不想把它作为错误记录在日志中。

编辑:根据请求,这是pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>net.mixclouddownload</groupId>
	<artifactId>downloader</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.3.RELEASE</version>
	</parent>
	<properties>
		<java-version>1.8</java-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
		</dependency>
		<dependency>
			<groupId>net.bull.javamelody</groupId>
			<artifactId>javamelody-core</artifactId>
			<version>1.63.0</version>
		</dependency>
		<dependency>
			<groupId>net.sf.jtidy</groupId>
			<artifactId>jtidy</artifactId>
			<version>r938</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>bootstrap</artifactId>
			<version>4.0.0-alpha.6</version>
		</dependency>
		<dependency>
			<groupId>org.webjars</groupId>
			<artifactId>font-awesome</artifactId>
			<version>4.7.0</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>
		<dependency>
			<groupId>com.ibm.icu</groupId>
			<artifactId>icu4j</artifactId>
			<version>58.2</version>
		</dependency>
		<dependency>
			<groupId>org.webjars.bower</groupId>
			<artifactId>bootstrap-social</artifactId>
			<version>5.0.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
		</dependency>
		<dependency>
			<groupId>org.twitter4j</groupId>
			<artifactId>twitter4j-core</artifactId>
			<version>4.0.6</version>
		</dependency>
		<dependency>
			<groupId>org.facebook4j</groupId>
			<artifactId>facebook4j-core</artifactId>
			<version>2.4.8</version>
		</dependency>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>21.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-cache</artifactId>
		</dependency>
		<dependency>
			<groupId>javax.cache</groupId>
			<artifactId>cache-api</artifactId>
		</dependency>
		<dependency>
			<groupId>ca.pjer</groupId>
			<artifactId>logback-awslogs-appender</artifactId>
			<version>0.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.5</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>${java-version}</source>
					<target>${java-version}</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<executable>true</executable>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-failsafe-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>integration-test</goal>
							<goal>verify</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

这是因为客户端在Tomcat有机会写出响应之前就关闭了连接。

这种异常的主要原因往往是"Internet Explorer",因为它处理资源连接的方式(如下载JavaScript、css、图标等);如果它决定不再需要资源,它会在服务器有机会向它写入内容之前关闭连接。当你在IE中使用Angularjs或其他SPA框架时,我也会看到更多这种情况。你会知道这是由IE引起的,因为带有的请求资源路径指向资源文件(如前所述)。

第二个(或者同样?)最常见的罪魁祸首可能是用户在页面有机会完成加载之前多次刷新页面,或者用户在页面完成加载之前导航离开。

第三个罪魁祸首,不太常见,但更令人愤怒的是,当你在自己的网络上呼叫服务时。您将在被调用的服务上看到一个"ClientAbortException",在客户端服务上看到"SocketException:连接重置"。原因通常是防火墙配置不正确。我和我的系统管理员谈过,她说上次我遇到这种情况是因为在高峰使用期间复制流量太高,所以防火墙无法及时返回数据包。解决方案是在其他重要应用程序的高峰使用期间限制来自特定来源(如复制)的流量。我想你可以通过模拟防火墙的大量使用和流量来复制这个错误。

最新更新