Java1.8原生http 与SSM Jetty性能对比
1 SSM Jetty
SSM框架
@RequestMapping(value = "/test", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")@ResponseBodypublic String testCon() throws Exception {Thread.sleep(20);return "OK";}
1.1 线程池线程数:200
ab -n 10000 -c 100 http://127.0.0.1:8080/api/aaa/test
Concurrency Level: 100
Time taken for tests: 13.538 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1190000 bytes
HTML transferred: 20000 bytes
Requests per second: 738.67 [#/sec] (mean)
Time per request: 135.379 [ms] (mean)
Time per request: 1.354 [ms] (mean, across all concurrent requests)
Transfer rate: 85.84 [Kbytes/sec] received
ab -n 100000 -c 1000 http://127.0.0.1:8080/api/aaa/test
Concurrency Level: 1000
Time taken for tests: 62.260 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 11900000 bytes
HTML transferred: 200000 bytes
Requests per second: 1606.17 [#/sec] (mean)
Time per request: 622.599 [ms] (mean)
Time per request: 0.623 [ms] (mean, across all concurrent requests)
Transfer rate: 186.65 [Kbytes/sec] received
好家伙,不使用框架的时候QPS能达到5k多,使用了框架后只能达到1.6K。那我增加jetty的线程池的线程数试试。
1.2 线程池线程数:1000
<Set name="minThreads" type="int"><Property name="jetty.threadPool.minThreads" deprecated="threads.min" default="1000"/></Set><Set name="maxThreads" type="int"><Property name="jetty.threadPool.maxThreads" deprecated="threads.max" default="1000"/></Set>
ab -n 20000 -c 200 http://127.0.0.1:8080/api/aaa/test
Concurrency Level: 200
Time taken for tests: 18.481 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Total transferred: 2380000 bytes
HTML transferred: 40000 bytes
Requests per second: 1082.20 [#/sec] (mean)
Time per request: 184.809 [ms] (mean)
Time per request: 0.924 [ms] (mean, across all concurrent requests)
Transfer rate: 125.76 [Kbytes/sec] received
Concurrency Level: 1000
Time taken for tests: 55.474 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 11900000 bytes
HTML transferred: 200000 bytes
Requests per second: 1802.65 [#/sec] (mean)
Time per request: 554.740 [ms] (mean)
Time per request: 0.555 [ms] (mean, across all concurrent requests)
Transfer rate: 209.49 [Kbytes/sec] received
2 总结
1.go1.20 QPS 4.5k左右
2.nginx QPS 2.5k左右
3.python3.6 QPS 381左右
4.java1.8 QPS 5.2k左右
5.java1.8+ SSM框架+jetty 线程池200线程:1k左右
6.java1.8+ SSM框架+jetty 线程池1000线程:1.8k左右
如此看来,java这太老的SSM框架、以及这种框架使用的线程池模式,对QPS的影响还真的大!虽然本次我没有测试go框架,但是根据我以前测试的经验,go原生和go框架的性能是差不多的,那也就意味着 go框架的性能 是 java ssm框架的性能的3倍了!而且要是如果jetty的线程池的线程开太多,线程的调度和维护还是影响开销~
赶快把go学起来!代码也要准备用go重构了~