压力测试 tio-boot

测试代码

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <tio.boot.version>1.6.5</tio.boot.version>
    <lombok-version>1.18.30</lombok-version>
    <hotswap-classloader.version>1.2.6</hotswap-classloader.version>
    <final.name>web-hello</final.name>
    <main.class>com.litongjava.tio.web.hello.HelloApp</main.class>
  </properties>
  <dependencies>
    <dependency>
      <groupId>com.litongjava</groupId>
      <artifactId>tio-boot</artifactId>
      <version>${tio.boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok-version}</version>
      <optional>true</optional>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2</artifactId>
      <version>2.0.12</version>
    </dependency>

    <dependency>
      <groupId>com.litongjava</groupId>
      <artifactId>jfinal-aop</artifactId>
      <version>1.2.9</version>
    </dependency>
    <dependency>
      <groupId>com.litongjava</groupId>
      <artifactId>hotswap-classloader</artifactId>
      <version>${hotswap-classloader.version}</version>
    </dependency>
  </dependencies>
package com.litongjava.tio.web.hello;

import com.litongjava.annotation.AComponentScan;
import com.litongjava.tio.boot.TioApplication;

@AComponentScan
public class HelloApp {
  public static void main(String[] args) {
    long start = System.currentTimeMillis();
    //TioApplicationWrapper.run(HelloApp.class, args);
    TioApplication.run(HelloApp.class, args);
    long end = System.currentTimeMillis();
    System.out.println((end - start) + "ms");
  }
}
package com.litongjava.tio.web.hello.controller;

import com.litongjava.annotation.RequestPath;
import com.litongjava.model.body.RespBodyVo;

@RequestPath
public class OkController {

  @RequestPath("/ok")
  public RespBodyVo ok() {
    return RespBodyVo.ok();
  }
}

测试数据

root@ping-Inspiron-3458:~# ab -c1000 -n10000000 http://localhost/ok
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000000 requests
Completed 2000000 requests
Completed 3000000 requests
Completed 4000000 requests
Completed 5000000 requests
Completed 6000000 requests
Completed 7000000 requests
Completed 8000000 requests
Completed 9000000 requests
Completed 10000000 requests
Finished 10000000 requests


Server Software:        -io
Server Hostname:        localhost
Server Port:            80

Document Path:          /ok
Document Length:        43 bytes

Concurrency Level:      1000
Time taken for tests:   1104.650 seconds
Complete requests:      10000000
Failed requests:        0
Total transferred:      1750000000 bytes
HTML transferred:       430000000 bytes
Requests per second:    9052.64 [#/sec] (mean)
Time per request:       110.465 [ms] (mean)
Time per request:       0.110 [ms] (mean, across all concurrent requests)
Transfer rate:          1547.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   64 197.9     31   15280
Processing:     1   46  95.3     45   54359
Waiting:        1   35  95.2     33   54350
Total:          1  110 223.0     78   55403

Percentage of the requests served within a certain time (ms)
  50%     78
  66%     84
  75%     88
  80%     91
  90%     98
  95%    107
  98%   1087
  99%   1104
 100%  55403 (longest request)

编写一个测试报告

测试报告

一、引言

本报告旨在评估本地服务器在高并发请求下的性能表现。通过使用 ApacheBench(ab)工具,对 http://localhost/ok 进行了压力测试,分析服务器的响应能力和稳定性。

二、测试环境

  • 服务器软件:t-io
  • 服务器主机名:localhost
  • 服务器端口:80
  • 文档路径:/ok
  • 文档长度:43 字节

三、测试配置

  • 并发级别:1000
  • 请求总数:10,000,000
  • 测试命令ab -c1000 -n10000000 http://localhost/ok

四、测试结果

  • 测试耗时:1104.650 秒
  • 完成请求数:10,000,000
  • 失败请求数:0
  • 总传输数据:1,750,000,000 字节
  • HTML 传输数据:430,000,000 字节
  • 平均每秒请求数:9,052.64 [#/sec]
  • 每个请求平均耗时
    • 单个请求(平均):110.465 ms
    • 并发请求(平均):0.110 ms
  • 传输速率:1547.08 Kbytes/sec

连接时间(毫秒)

最小值平均值标准偏差中位数最大值
连接064197.93115280
处理14695.34554359
等待13595.23354350
总计1110223.07855403

请求完成时间百分比(毫秒)

  • 50% 的请求在 78 ms 内完成
  • 66% 的请求在 84 ms 内完成
  • 75% 的请求在 88 ms 内完成
  • 80% 的请求在 91 ms 内完成
  • 90% 的请求在 98 ms 内完成
  • 95% 的请求在 107 ms 内完成
  • 98% 的请求在 1087 ms 内完成
  • 99% 的请求在 1104 ms 内完成
  • 100% 的请求在 55403 ms 内完成(最长请求)

五、分析

  1. 高吞吐量:服务器在高并发(1000)情况下,成功处理了 10,000,000 个请求,无失败请求,平均每秒处理 9,052.64 个请求,表现出较高的吞吐能力。

  2. 响应时间:平均每个请求耗时 110.465 ms,大部分请求(95%)在 107 ms 内完成,表明服务器在高负载下仍能保持较快的响应速度。

  3. 稳定性:标准偏差较大,尤其是在连接和总计时间上,说明响应时间存在一定波动。最大请求时间达到 55,403 ms,可能是由于个别请求的延迟,需要进一步调查。

  4. 资源利用:高并发请求下,服务器资源(如 CPU、内存、网络带宽)可能达到瓶颈,需要监控系统资源以确保性能的可持续性。

六、结论

测试结果显示,服务器在高并发负载下具有良好的性能和稳定性,能够高效处理大量请求。然而,响应时间的波动和个别请求的高延迟提示我们需要:

  • 优化服务器配置:调整线程池、连接池等参数,提升并发处理能力。
  • 监控系统资源:确保 CPU、内存和网络等资源不会成为性能瓶颈。
  • 进一步测试:进行长时间稳定性测试和更高并发级别的压力测试,找出潜在问题。

通过上述措施,可进一步提升服务器的性能和稳定性,为用户提供更优质的服务。