我有嵌入式码头的spring boot应用程序,其配置为:jetty's minThread: 50
jetty's maxThread: 500
jetty's maxQueueSize: 25000
(我将默认队列更改为LinkedBlockingQueue
)我没有更改acceptors
和selectors
(因为我不相信硬编码值)
通过以上配置,我得到了jmeter测试结果:
摘要= 183571在00:01:54 = 1611.9 / s平均:36分:3最大值:1062误差:0(0.00%)
摘要= 496619在00:05:00 = 1654.6 / s平均:45分:3最大值:1169误差:0(0.00%)
如果我增加并发用户,我没有看到任何改进。我想增加并发性。怎么做到这一点?
我花了更多精力改善业务逻辑。仍然没有多大改善。然后我决定开发一个hello world spring-boot项目。即,
弹簧靴(1.5.9)
码头9.4.15
休息控制器,它有获得端点
代码如下:
@GetMapping
public String index() {
return "Greetings from Spring Boot!";
}
然后我尝试使用apachebench进行基准测试
75个并发用户:
ab -t 120 -n 1000000 -c 75 http://10.93.243.87:9000/home/
Server Software:
Server Hostname: 10.93.243.87
Server Port: 9000
Document Path: /home/
Document Length: 27 bytes
Concurrency Level: 75
Time taken for tests: 37.184 seconds
Complete requests: 1000000
Failed requests: 0
Write errors: 0
Total transferred: 143000000 bytes
HTML transferred: 27000000 bytes
Requests per second: 26893.28 [#/sec] (mean)
Time per request: 2.789 [ms] (mean)
Time per request: 0.037 [ms] (mean, across all concurrent requests)
Transfer rate: 3755.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 23.5 0 3006
Processing: 0 2 7.8 1 404
Waiting: 0 2 7.8 1 404
Total: 0 3 24.9 2 3007
100个并发用户:
ab -t 120 -n 1000000 -c 100 http://10.93.243.87:9000/home/
Server Software:
Server Hostname: 10.93.243.87
Server Port: 9000
Document Path: /home/
Document Length: 27 bytes
Concurrency Level: 100
Time taken for tests: 36.708 seconds
Complete requests: 1000000
Failed requests: 0
Write errors: 0
Total transferred: 143000000 bytes
HTML transferred: 27000000 bytes
Requests per second: 27241.77 [#/sec] (mean)
Time per request: 3.671 [ms] (mean)
Time per request: 0.037 [ms] (mean, across all concurrent requests)
Transfer rate: 3804.27 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 35.7 1 3007
Processing: 0 2 9.4 1 405
Waiting: 0 2 9.4 1 405
Total: 0 4 37.0 2 3009
500个并发用户:
ab -t 120 -n 1000000 -c 500 http://10.93.243.87:9000/home/
Server Software:
Server Hostname: 10.93.243.87
Server Port: 9000
Document Path: /home/
Document Length: 27 bytes
Concurrency Level: 500
Time taken for tests: 36.222 seconds
Complete requests: 1000000
Failed requests: 0
Write errors: 0
Total transferred: 143000000 bytes
HTML transferred: 27000000 bytes
Requests per second: 27607.83 [#/sec] (mean)
Time per request: 18.111 [ms] (mean)
Time per request: 0.036 [ms] (mean, across all concurrent requests)
Transfer rate: 3855.39 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 14 126.2 1 7015
Processing: 0 4 22.3 1 811
Waiting: 0 3 22.3 1 810
Total: 0 18 129.2 2 7018
1000个并发用户:
ab -t 120 -n 1000000 -c 1000 http://10.93.243.87:9000/home/
Server Software:
Server Hostname: 10.93.243.87
Server Port: 9000
Document Path: /home/
Document Length: 27 bytes
Concurrency Level: 1000
Time taken for tests: 36.534 seconds
Complete requests: 1000000
Failed requests: 0
Write errors: 0
Total transferred: 143000000 bytes
HTML transferred: 27000000 bytes
Requests per second: 27372.09 [#/sec] (mean)
Time per request: 36.534 [ms] (mean)
Time per request: 0.037 [ms] (mean, across all concurrent requests)
Transfer rate: 3822.47 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 30 190.8 1 7015
Processing: 0 6 31.4 2 1613
Waiting: 0 5 31.4 1 1613
Total: 0 36 195.5 2 7018
从上面的测试开始,我实现了每秒约27K,有75个用户本身,但它看起来增加了用户也增加了延迟。此外,我们可以清楚地注意到连接时间正在增加。
我要求我的应用程序支持40k并发用户(假设所有用户都使用自己独立的浏览器),请求应在250毫秒内完成。
请帮帮我
您可以尝试增加或减少Jetty线程的数量,但应用程序性能将取决于应用程序逻辑。如果您当前的瓶颈是数据库查询,那么通过调整HTTP层几乎不会有任何改进,尤其是在通过本地网络进行测试时。
找到应用程序中的瓶颈,尝试改进它,然后再次测量以确认它更好。重复这三个步骤,直到达到所需的性能。不要盲目地调整性能,这是浪费时间。