Java Spring引导REST API服务器连接在某个时候超时

Java Spring引导REST API服务器连接在某个时候超时,java,spring,spring-boot,tomcat,jmeter,Java,Spring,Spring Boot,Tomcat,Jmeter,我正在用ApacheJMeter测试我的SpringBootRESTAPI服务器 大多数“连接时间”为10毫秒,但有时会发生连接超时 JMeter设置 - Thread Number of Threads : 500 Ramp-Up Period : 50 - HTTP Request Connect timeout : 20000ms Response timeout : 40000ms - Constant timer Thread delay : 1000ms CentOS7设置 o

我正在用ApacheJMeter测试我的SpringBootRESTAPI服务器

大多数“连接时间”为10毫秒,但有时会发生连接超时

JMeter设置

- Thread
Number of Threads : 500
Ramp-Up Period : 50

- HTTP Request
Connect timeout : 20000ms
Response timeout : 40000ms

- Constant timer
Thread delay : 1000ms
CentOS7设置

open files                      (-n) 65535
max user processes              (-u) 65535
Java执行设置

-Xmx8g -Xms4g -Xmn2g -XX:PermSize=512m -XX:SurvivorRatio=16
Spring Boot application.properties Tomcat设置

server.tomcat.connection-timeout=20000
server.tomcat.max-connections=100000
server.tomcat.threads.max=10000
server.tomcat.threads.min-spare=2500
server.tomcat.accept-count=10000
JMeter在10000~20000个请求中正常工作,但在此之后会发生连接超时

Starting standalone test @ Fri Apr 16 09:30:29 KST 2021 (1618533029412)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary +      1 in 00:00:03 =    0.4/s Avg:  1319 Min:  1319 Max:  1319 Err:     0 (0.00%) Active: 127 Started: 127 Finished: 0
summary +   8771 in 00:00:28 =  318.5/s Avg:   398 Min:   236 Max:  4191 Err:     0 (0.00%) Active: 500 Started: 500 Finished: 0
summary =   8772 in 00:00:30 =  290.3/s Avg:   398 Min:   236 Max:  4191 Err:     0 (0.00%)
summary +   9349 in 00:00:30 =  311.6/s Avg:   534 Min:   237 Max:  3582 Err:     0 (0.00%) Active: 500 Started: 500 Finished: 0
summary =  18121 in 00:01:00 =  300.9/s Avg:   468 Min:   236 Max:  4191 Err:     0 (0.00%)
summary +   5872 in 00:00:30 =  195.7/s Avg:  1494 Min:   235 Max: 20855 Err:    10 (0.17%) Active: 500 Started: 500 Finished: 0
summary =  23993 in 00:01:30 =  265.9/s Avg:   719 Min:   235 Max: 20855 Err:    10 (0.04%)
org.apache.http.conn.HttpHostConnectException:连接到:[/112.220.184.107]失败:连接超时:连接
位于org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
位于org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:336)
位于org.apache.http.impl.conn.poolghttpclientconnectionmanager.connect(poolghttpclientconnectionmanager.java:374)
位于org.apache.http.impl.execchain.MainClientExec.buildRoute(MainClientExec.java:393)
位于org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
位于org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
位于org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
位于org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
位于org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
在org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
位于org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:843)
位于org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:574)
位于org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67)
位于org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231)
位于org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220)
位于org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
位于org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
位于org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
位于org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
运行(Thread.java:748)
原因:java.net.ConnectException:连接超时:连接
位于java.net.DualStackPlainSocketImpl.waitForConnect(本机方法)
位于java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:607)
位于org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
位于org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 还有19个

你能告诉我为什么会这样吗

summary +   5872 in 00:00:30 =  195.7/s Avg:  1494 Min:   235 Max: 20855 Err:    10 (0.17%) Active: 500 Started: 500 Finished: 0
                                                                  ^^^^^^^
您的响应时间增加到20秒以上,因此Tomcat拒绝连接(最有可能的情况是该设置起到了防止连接中断的保护作用)

将其设置为
-1
以禁用它,或者使用查看是什么导致应用程序/tomcat端出现问题

另外,JMeter命令行输出并不能说明全部情况,我建议从.jtl结果文件生成一些图表,如、、等,这样您就可以关联各种性能指标。监控服务器端操作系统健康指标(如CPU、RAM、网络、交换、磁盘使用率)以及JVM JMX指标也是一个好主意,它可以n使用即

您的响应时间增加到20秒以上,因此Tomcat拒绝连接(最有可能的情况是该设置起到了防止连接中断的保护作用)

将其设置为
-1
以禁用它,或者使用查看是什么导致应用程序/tomcat端出现问题


另外,JMeter命令行输出并不能说明全部情况,我建议从.jtl结果文件生成一些图表,如、、等,这样您就可以关联各种性能指标。监控服务器端操作系统健康指标(如CPU、RAM、网络、交换、磁盘使用率)以及JVM JMX指标也是一个好主意,它可以n可以使用以下方法完成:检查打开的文件描述符,JMeter是否始终创建新连接(似乎不是这样),检查gc pausecheck以查看打开的文件描述符,JMeter是否始终创建新连接(似乎不是这样),检查gc Pause我已经上传了我的JMeter PerfMon结果,但我找不到它发生的原因。我已经上传了我的JMeter PerfMon结果,但找不到它发生的原因。。
summary +   5872 in 00:00:30 =  195.7/s Avg:  1494 Min:   235 Max: 20855 Err:    10 (0.17%) Active: 500 Started: 500 Finished: 0
                                                                  ^^^^^^^