Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

这篇具有很好参考价值的文章主要介绍了Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

最近的 Taurus.MVC 版本,对性能这一块有了不少优化,因此准备进行一下压测,来测试并记录一下 Taurus.MVC 框架的性能,以便后续持续优化改进。

今天先压测 .NET Core 版本,后续有时间再压测一下.NET 版本。

下面来看不同场景下的压测结果,以下测试结果会由两台电脑进行分别测试。

一、旧电脑环境:

CPU :Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz
内核: 6
逻辑处理器: 6
内存:16G

程序在 .NET8 编绎,以 Kestrel 为主机直接运行在 Window 环境:

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

1、测试 Window 11 下,单机ab工具压测:

由于ab工具占用资源不多,发起的并发能力也有限,先用它进行本机压测,试试水。

ab的版本信息:

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

A、先测试单线程的运行性能(简单接口返回,控制台带日志输出):

ab -n 100000 -c 1 http://192.168.100.102:51996/api/hello

测试结果:并发数1,qps =  3263

Server Software:
Server Hostname:        192.168.100.102
Server Port:            51996

Document Path:          /api/hello
Document Length:        24 bytes

Concurrency Level:      1
Time taken for tests:   30.641 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      13900000 bytes
HTML transferred:       2400000 bytes
Requests per second:    3263.63 [#/sec] (mean)
Time per request:       0.306 [ms] (mean)
Time per request:       0.306 [ms] (mean, across all concurrent requests)
Transfer rate:          443.01 [Kbytes/sec] received

看一下程序运行的时间:

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

从程序打印的日志上看,接口执行时间仅有0.03毫秒,理论值单线程压测是可以达到1000/0.0345= 28089,

去掉控制器日志输出,还能再提升1下,再配置个64核cpu,就是传说中的轻轻松松的单机百万qps了。

B、我们调整一下参数,看看ab在单机下能压出多少来(简单接口返回,控制台带日志输出):

ab -n 100000 -c 2 http://192.168.100.102:51996/api/hello

测试结果:

Concurrency Level:      2
Time taken for tests:   18.187 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      13900000 bytes
HTML transferred:       2400000 bytes
Requests per second:    5498.28 [#/sec] (mean)
Time per request:       0.364 [ms] (mean)
Time per request:       0.182 [ms] (mean, across all concurrent requests)
Transfer rate:          746.35 [Kbytes/sec] received

没办法,只能压 2 个并发链接,CPU 跑满了,程序占40%多,ab也占了40%多,说好的ab不吃资源的,直接cpu拉走一半,呵呵。

C、我们关闭日志输出,重新看看上面的两个能测试出多少(简单接口返回,控制台无日志输出):

我们添加以下代码,关闭 Kestrel 默认的控制台信息输出:

services.AddLogging(op => op.SetMinimumLevel(LogLevel.None));

【后续的测试,都保持控制器日志关闭】

重新编绎后,进行重新测试:

测试结果:并发数1,qps = 3595

Concurrency Level:      1
Time taken for tests:   2.781 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1390000 bytes
HTML transferred:       240000 bytes
Requests per second:    3595.51 [#/sec] (mean)
Time per request:       0.278 [ms] (mean)
Time per request:       0.278 [ms] (mean, across all concurrent requests)
Transfer rate:          488.06 [Kbytes/sec] received

关闭日志,提升了300多,后续测试,将会保持控制台日志的关闭。

测试结果:并发数 2,qps = 5765

Concurrency Level:      2
Time taken for tests:   1.734 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1390000 bytes
HTML transferred:       240000 bytes
Requests per second:    5765.77 [#/sec] (mean)
Time per request:       0.347 [ms] (mean)
Time per request:       0.173 [ms] (mean, across all concurrent requests)
Transfer rate:          782.66 [Kbytes/sec] received

接下来,我们将接口调整一下,单纯的返回 Hello World 没啥看头,改成常规一些。

D、使用 CYQ.Data 读数据库,输出 Json,来看看压测结果(读数据库接口,控制台无日志输出)

测试代码:

public void Hello(string msg)
{
    string conn = "server=.;database=MSLog;uid=sa;pwd=123456";
    using (MProc proc = new MProc("select top 1 * from SysLogs", conn))
    {
        Write(proc.ExeJson());
    }
}

运行结果:返回一条数据:

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

下面直接进行压测结果:并发数 2 ,qps = 5470,和未关闭日志输出时差不多。

Concurrency Level:      2
Time taken for tests:   1.828 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      10810000 bytes
HTML transferred:       9590000 bytes
Requests per second:    5470.23 [#/sec] (mean)
Time per request:       0.366 [ms] (mean)
Time per request:       0.183 [ms] (mean, across all concurrent requests)
Transfer rate:          5774.73 [Kbytes/sec] received

小结:

从上面的测试结果,观察CPU中可以看出,ab 这个工具,吃 cpu 资源不说,其并发数量也有限。

下面更换 wrk 进行测试,由于 wrk 只能在 linux 中运行,因此在本机上,开启了虚拟机。

2、测试 Window 11 下,虚拟机wrk工具压测:(读数据库输出,控制台无日志输出)

虚拟机环境:

CPU :Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz
内核: 2
逻辑处理器: 2
内存:4G

分完虚拟机后,本机就剩下 4 核了,再去掉打开任务管理器,就占掉了10%的cpu,我了个去,当个3核用了。

不过问题不大,尽管测就是了,为了保持接口的通用性,继续使用读数据库输出 Json 的接口:

先使用1线程1并发测试试试水:

 wrk -t 1 -c1 -d 10s http://192.168.100.102:51996/api/hello

测试结果:qps = 1518

Running 10s test @ http://192.168.100.102:51996/api/hello
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.76ms   14.97ms 200.26ms   98.45%
    Req/Sec     1.54k   402.67     2.62k    73.74%
  15294 requests in 10.07s, 16.07MB read
Requests/sec:   1518.47
Transfer/sec:      1.60MB

测试过程,通过虚拟机(top 指令)和Windows(任务管理器)观察 cpu,发现没怎么动,看来 wrk 要跑满性能,得加量。

我们给虚拟机分了2个核,不能浪费,要跑满它,于是不断调整参数:

wrk -t 2 -c4096 -d 10s http://192.168.100.102:51996/api/hello

测试结果:qps = 23303 

Running 10s test @ http://192.168.100.102:51996/api/hello
  2 threads and 4096 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.17ms   19.27ms 307.26ms   82.72%
    Req/Sec    11.63k    12.33k   37.01k    77.53%
  234427 requests in 10.06s, 246.37MB read
  Socket errors: connect 3077, read 0, write 0, timeout 0
Requests/sec:  23303.58
Transfer/sec:     24.49MB

从测试结果观察,wrk 更能压测出性能的极限,当然,这是 wrk 的极限,不是程序的极限。

因为整个压测过程,程序只占了30%左右的cpu,但没办法,cpu 让其它资源给吃光了。

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

我们知道,.NET Core 的程序,跑在 Linux 下,能会有更优的性能,不过不急先。

由于本机资源有限,干扰程序较多,这里打算拿出我的新电脑,来进行重新测试,看看程序在新电脑的表现如何。

二、新电脑环境:

CPU    13th Gen Intel(R) Core(TM) i5-13600KF
内核:    14
逻辑处理器: 20
内存:64G

接下来,我们看看新电脑的表现如何,使用一样的程序:

1、测试 Window 11 下,单机ab工具压测:

A、先测试单线程的运行性能(简单接口返回,控制台无日志输出):

ab -n 100000 -c 1 http://192.168.100.102:51996/api/hello

测试结果:并发数1,qps =  11389

Concurrency Level:      1
Time taken for tests:   0.878 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1410000 bytes
HTML transferred:       260000 bytes
Requests per second:    11389.76 [#/sec] (mean)
Time per request:       0.088 [ms] (mean)
Time per request:       0.088 [ms] (mean, across all concurrent requests)
Transfer rate:          1568.32 [Kbytes/sec] received

B、我们调整一下参数,看看ab在单机下能压出多少来(简单接口返回,控制台无日志输出):

ab -n 100000 -c 4 http://192.168.100.101:51996/api/hello

测试结果:并发数4,qps = 18247

Concurrency Level:      4
Time taken for tests:   5.480 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      14100000 bytes
HTML transferred:       2600000 bytes
Requests per second:    18247.09 [#/sec] (mean)
Time per request:       0.219 [ms] (mean)
Time per request:       0.055 [ms] (mean, across all concurrent requests)
Transfer rate:          2512.54 [Kbytes/sec] received

看来 ab 不行啊,压不出结果,程序的cpu才跑了不到2%。

小结:

虽然 ab 压测不够力,但从单线程的测试结果可以看出,新电脑的cpu运行效率是旧电脑性能的3倍左右,效率拉满。

以此看出,平时在采购云服务器时,也得顺带关注一下CPU的型号,好的型号,能提升运行效率,提高并发。

2、测试 Window 11 下,虚拟机wrk工具压测:(简单接口,控制台无日志输出)

虚拟机环境:

CPU    13th Gen Intel(R) Core(TM) i5-13600KF
内核:    2
逻辑处理器: 2
内存:4G

先给虚拟机2核,本机剩下 12 核了,可以好好压一下了。

wrk -t 1 -c 1 -d 10s http://192.168.100.101:51996/api/hello

测试结果:1并发,qps = 14084

Running 10s test @ http://192.168.100.101:51996/api/hello
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     6.43ms   29.09ms 218.31ms   95.10%
    Req/Sec    14.43k     3.27k   17.98k    91.84%
  141377 requests in 10.04s, 21.71MB read
Requests/sec:  14084.98
Transfer/sec:      2.16MB

和 ab 一样,一个链接并发压不出什么效果,加大效果看看。

wrk -t 8 -c 2048 -d 10s http://192.168.100.101:51996/api/hello

测试结果:qps = 84306

Running 10s test @ http://192.168.100.101:51996/api/hello
  28 threads and 2048 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.40ms   10.81ms 222.31ms   86.60%
    Req/Sec     5.35k     3.03k   18.81k    69.09%
  850042 requests in 10.08s, 130.52MB read
  Socket errors: connect 1051, read 0, write 100, timeout 0
Requests/sec:  84306.38
Transfer/sec:     12.94MB

压测试过程,观察两个cpu,虚拟机(110%-130%,2核还没跑满),程序只跑16%-20%,整体40-50%左右,感觉还能往上跑。

估计是压力不够,试着分给虚拟机多2核,看看有没有效果。

虚拟机环境:

CPU    13th Gen Intel(R) Core(TM) i5-13600KF
内核:    4
逻辑处理器: 4
内存:8G

继续压测试:

wrk -t18 -c 1400 -d 60s http://192.168.100.101:51996/api/hello

测试结果:qps = 105462

Running 1m test @ http://192.168.100.101:51996/api/hello
  18 threads and 1400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    10.02ms   10.05ms 267.70ms   90.26%
    Req/Sec     6.68k     3.31k   17.16k    62.65%
  6339226 requests in 1.00m, 0.95GB read
  Socket errors: connect 383, read 0, write 25, timeout 0
Requests/sec: 105462.01
Transfer/sec:     16.19MB

之前压测时间在10s-20s,qps 都在9万多,把压测时间拉长到1分钟,超过了10万了。

看来把压测时间拉长,qps 会高一点。

测试过程中,虚拟机CPU(在180%左右,给了4核,也不顶用,没能跑满),程序占用CPU(20%左右)。

还是跑不满,没办法,压力上不去了,只好换个口味测试。

重新压测 CYQ.Data 读数据库转Json输出的接口(数据库mssql2012 安装在Window 11 本机):

接口的调用输出:

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

进行压测:

wrk -t18 -c 1200 -d 60s http://192.168.100.101:51996/api/hellodb

测试结果:qps = 73122

Running 1m test @ http://192.168.100.101:51996/api/hellodb
  18 threads and 1200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    47.62ms   86.25ms   1.15s    85.85%
    Req/Sec     4.61k     2.10k   17.56k    68.95%
  4394613 requests in 1.00m, 4.51GB read
  Socket errors: connect 185, read 0, write 24, timeout 1
Requests/sec:  73122.19
Transfer/sec:     76.85MB

再换一个,直接压 MVC 界面,看看效果。

这是压测试的 Taurus.MVC 的主界面:

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

修改压测路径:

wrk -t18 -c 1200 -d 60s http://192.168.100.101:51996/home/index

测试结果:qps = 39349

Running 1m test @ http://192.168.100.101:51996/home/index
  18 threads and 1200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    82.78ms  160.41ms   1.94s    87.98%
    Req/Sec     2.33k     0.94k    7.67k    67.93%
  2364614 requests in 1.00m, 8.75GB read
  Socket errors: connect 185, read 0, write 0, timeout 918
Requests/sec:  39349.00
Transfer/sec:    149.13MB

这时候观察,虽然取得了不错的结果,但 CPU 跑满100%了,也有918个超时,看来呈现的加载与呈现,很消耗计算量。

到了最后的步骤了,.NET Core 程序,还是得放到 Linux 系统下跑看看效果 ,复制一台虚拟机,用来部署 .NET Core 程序。

3、测试 CentOS 7 下,虚拟机 wrk 工具压测:

新的虚拟机环境:

CPU    13th Gen Intel(R) Core(TM) i5-13600KF
内核:    8
逻辑处理器: 8
内存:8G

1、测试接口:直接压测 CYQ.Data 读数据库转Json输出的接口(数据库mssql2012安装在Window 11 系统):

wrk -t18 -c 1600 -d 60s http://192.168.100.111:51996/api/hellodb

测试结果:qps = 80831

Running 1m test @ http://192.168.100.111:51996/api/hellodb
  18 threads and 1600 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    35.63ms   74.47ms   1.03s    87.97%
    Req/Sec     4.83k     2.67k   18.55k    69.03%
  4856997 requests in 1.00m, 4.98GB read
  Socket errors: connect 581, read 0, write 0, timeout 0
Requests/sec:  80831.35
Transfer/sec:     84.95MB

观察CPU:压测虚拟机(130%左右,用了1.3个核左右),应用程序虚拟机(450%左右,用了4.5个核左右)

2、测试接口:直接测试简单接口

wrk -t18 -c 1600 -d 60s http://192.168.100.111:51996/api/hello

测试结果:qps = 105994

Running 1m test @ http://192.168.100.111:51996/api/hello
  18 threads and 1600 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     9.16ms    4.84ms 212.60ms   79.65%
    Req/Sec     6.32k     3.65k   27.06k    57.03%
  6424281 requests in 1.00m, 0.95GB read
  Socket errors: connect 581, read 0, write 0, timeout 0
Requests/sec: 106908.28
Transfer/sec:     16.21MB

观察CPU:和上一个结果差不多,只用了虚拟机的50%左右,就是部署在Linux 上,随便调整参数,都轻松10万+。

总结:

对于 API 压测:

旧电脑轻松就打满CPU,主要是被ab和其它应用吃了资源,所以压测上不去,去掉虚拟机两核后,在读数据库转Json输出的情况下,压出了2万3的qps。

新电脑上限太高,wrk 都压不住,上10万+了,CPU也才20%左右,可见一个高效的CPU对并发的提升是多么明显。

新电脑在读数据库转Json输出的情况下,也有8万+的qps,这个3倍左右的效率,明显的有点明显了。

最后部署在 Linux,可以感觉性能明显比 Window 运行高一些,Window 需要小小调优参数才10万+,而 Linux 上随便调都10万+。

但因wrk给的压力也有限,10万+后无法再测试了,听说 ulimit -n 命令可以解锁,发起更大的并发,这个下次再试了。

对于 MVC 压测:

明显感觉 MVC 的计算量大了很多,wrk 提供的压力已足够跑满CPU,极限跑出近4万的qps,感觉后续应该还能小优化一下。

整体来说,今天的压力测试结果,除了压测试MVC界面,CPU 压满了,而压测试API,CPU 都没能跑满整机的30%,心累啊,先就到这里了。

附本文的运行程序:TaurusMVC运行程序下载 - 解压后可直接运行 Taurus.View.exe,欢迎下载自行测试【需要.NET 8 运行环境】

Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

 文章来源地址https://www.toymoban.com/news/detail-846533.html

到了这里,关于Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go 性能压测工具之wrk介绍与使用

    在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug;压力测试(压测)是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景,可以评估系统的性能瓶颈、可靠性和稳定性,进而优化系统架构和资源配

    2024年04月08日
    浏览(53)
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-2】 - 配置管理-Mvc【含请求日志打印】

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【4-1】 - 配置管理-Kestrel【含https启用】 本篇继续介绍下一个内容: 界面如图: 以下为配置说明: 控制 Taurus 的 Mvc 是否启用,比如网关、或注册中心,或者使用其它Mvc框架,可以选择不启用。 如正常访问Mvc时: 禁用它后:

    2024年02月11日
    浏览(48)
  • Taurus.mvc .Net Core 微服务开源框架发布V3.1.7:让分布式应用更高效。

    自首个带微服务版本的框架发布:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 已经过去快1年了,在这近一年的时间里,版本经历了N个版本的迭代。 如今,是时候写文章介绍一下了: 以下介绍中,仅以.Net Core 6 为示例代码。 框架支持在.Net Fr

    2024年02月08日
    浏览(44)
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-4】 - 配置管理-Mvc【Plugin-CORS 跨域】

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【4-3】 - 配置管理 - Mvc【Plugin-MicroService 微服务】 本篇继续介绍下一个内容: 界面如下: 跨域功能相关配置说明如下: 仅需要开启该功能,即可开启跨域功能。 如果需要更精细化的配置,看下面的配置。 可以根据情况增加或

    2024年02月05日
    浏览(65)
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-5】 - 配置管理-Mvc【Plugin-Admin 后台】

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【4-4】 - 配置管理-Mvc【Plugin-CORS 跨域】 本篇继续介绍下一个内容: 配置界面如下:  配置说明如下: 这是个很危险的开关: 因此,需要知道持久化的目录: 默认在 /App_Data/admin/config.ini 中,以 json 格式存档,大至如下: 可

    2024年02月04日
    浏览(49)
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-3】 - 配置管理-Mvc【Plugin-MicroService 微服务】

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【4-2】 - 配置管理-Mvc【含请求日志打印】 本篇继续介绍下一个内容:  界面如下: 简要说明: 下面对配置进行说明: 必要配置说明: 需要在 appsettings.json 或 web.config 配置该选项,指明类型,如: 其余选项,可采用默认值,

    2024年02月11日
    浏览(36)
  • 【wrk2】轻量级性能测试工具

    wrk/wrk2是针对http协议的基准测试工具,特点是在单击多核CPU的前提下,通过系统自带的高性能I/O机制【epoll、kqueue等】,以多线程和事件模式,在指定的时间和请求范围下对目标机器产生负载。特点如下: 优势 劣势 1、安装简单、容易上手 2、基于系统自身的高性能机制,单

    2024年02月15日
    浏览(46)
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-7】 - 配置管理-Mvc【Plugin-Metric 接口调用次数统计】

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【4-6】 - 配置管理-Mvc【Plugin-Doc 接口测试及文档】 本篇继续介绍下一个内容: 配置界面如下: 打开开关时,可以通过访问Metric菜单查看统计项:   默认不统计。 如果为true,则写入硬盘。 时间单位为秒。  配置的是相对路径

    2024年02月04日
    浏览(57)
  • 【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?

    目录 前言 wrk 优点 缺点 jmeter 优点 缺点 locust 优点 缺点 总结 资料获取方法 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢? 今天,笔者将根据自己使用经验,针对jmeter、locust、wrk和loadrunner常用的性能测试工具进行简单介

    2024年02月14日
    浏览(54)
  • 【压测】通过Jemeter进行压力测试(超详细)

    通过SpringCloudGateway整合Nacos进行负载均衡和动态路由选择。由于Nacos的服务发现有一定的延迟性,所以在服务突然挂机的时候,QPS较大的情况下,还是会有部分的请求进入到这个服务。为了解决这个问题,改写了一点点nacos基于ribbon的负载选择,通过筛选最近响应时间较短的服

    2024年02月02日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包