简体   繁体   English

Spring 启动 REST API 服务器连接有时超时

[英]Spring Boot REST API server Connection timed out sometime

I'm testing my Spring Boot REST API server with Apache JMeter. I'm testing my Spring Boot REST API server with Apache JMeter.

Most of 'Connect Time' is in 10ms, but connection timed out occurs sometime.大多数“连接时间”在 10 毫秒内,但有时会发生连接超时。

JMeter's settings JMeter 的设置

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

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

- Constant timer
Thread delay : 1000ms

CentOS7 settings CentOS7 设置

open files                      (-n) 65535
max user processes              (-u) 65535

Java execution settings Java 执行设置

-Xmx8g -Xms4g -Xmn2g -XX:PermSize=512m -XX:SurvivorRatio=16

Spring Boot application.properties Tomcat settings Spring 启动应用程序.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 works normally up to 10,000~20,000 requests, but connection timeout occurs after that. JMeter 最多可以正常工作 10,000~20,000 个请求,但之后会出现连接超时。

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: Connect to <IP Address>:<Port> [/112.220.184.107] failed: Connection timed out: connect
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:336)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:843)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:574)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220)
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:607)
    at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
    ... 19 more

中央处理器 要求 交易 线

Can you tell me why it happens?你能告诉我为什么会这样吗?

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
                                                                  ^^^^^^^

Your response time increases above 20 seconds hence Tomcat rejects the connection (most probably the setting acts as the protection from slow HTTP attacks您的响应时间增加到 20 秒以上,因此 Tomcat 拒绝连接(很可能该设置可以防止慢速 HTTP 攻击

either set it to -1 to disable it or use a profiler tool to see what is causing the problem on your application/tomcat end.要么将其设置为-1以禁用它,要么使用分析器工具查看导致应用程序/tomcat 端出现问题的原因。

Also JMeter command-line output doesn't tell the full story, I would recommend generating some charts from the.jtl results file like Response Times Over Time , Active Threads Over Time , Transactions per Second , etc. so you could correlate various performance metrics.此外 JMeter 命令行 output 并不能说明全部情况,我建议从 .jtl 结果文件中生成一些图表,例如Response Times Over TimeActive Threads Over TimeTransactions per Second等,以便您可以关联各种性能指标. It's also a good idea to monitor server-side operating system health metrics like CPU, RAM, Network, Swap, Disk usage as well as JVM JMX metrics, it can be done using ie JMeter PerfMon Plugin监视服务器端操作系统健康指标(如 CPU、RAM、网络、交换、磁盘使用情况以及 JVM JMX 指标)也是一个好主意,可以使用即JMeter PerfMon 插件来完成

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 IO错误:在部署JAR文件一段时间后,连接在Spring Boot中超时了吗? - IO Error: Connection timed out in spring boot after sometime of deploy JAR file? Spring Boot调用rest ws SocketTimeoutException连接超时 - Spring Boot calling rest ws SocketTimeoutException connect timed out 从Eclipse调用Rest API时连接超时 - Connection timed out when call Rest API from Eclipse 连接仅对服务器上的wikmedia api超时,但在本地有效 - Connection timed out only for wikmedia api on server but works on local 带有 Spring Boot 的 API Rest - API Rest with Spring Boot 尝试使用Spring-WS访问WS服务器 - “连接超时”,但服务器在使用SOAP UI进行测试时会响应 - Trying to access a WS server with Spring-WS - “Connection timed out”, but the server respond when tested with SOAP UI Healthvault Java API:连接超时:连接 - Healthvault Java API:Connection timed out: connect 具有Android客户端的Linux服务器:连接超时 - Linux server with Android client: connection timed out Spring Boot-具有自签名证书的客户端服务器REST API - Spring Boot - client server REST API with self-signed certificate 如何在Spring Boot Rest API中获取服务器路径 - How to get server path in spring boot rest api
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM