转:https://www.cnblogs.com/savorboard/archive/2016/10/17/dotnet-benchmarks.html
前言
性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检。比如我们在购买手机、显卡、CPU等的时候,可能会更加的关注于这样指标,所以本篇就来做一个性能评测。
性能也一直是我们开发人员一直追求的一个目标,我们在做语言选择,平台选择,架构选择的过程中都需要在性能之间做衡量。
同样性能对 .NET Core 团队来说也是至关重要的,一项新技术的诞生,除了对生产力的提高,还有技术团队对性能的追求。
今天,我们就来做一个对比测试,来看看微软的这样新技术性能到底怎么样,俗话说的好:“是骡子是马,拉出来溜溜”。
下面让我开始吧。
目录
测试目标
在测试之前,我们必须要明确我们本次测试想达到的一个目标。本次测试主要是测试应用程序的一个吞吐量。其中QPS,并发数,响应时间是我们衡量吞吐量的几个重要指标。
以下是本次对比测试的任务目标:
编号
对比方
系统环境
宿主环境
测试目标
1
ASP.NET Core
vs ASP.NET Core
Windows
Kestrel
vs IIS
相同平台不同宿 主间性能差距
2
ASP.NET Core
vs ASP.NET
Windows
IIS
vs IIS
相同平台相同宿主不同框架 间性能差距
3
ASP.NET Core
vs ASP.NET
Windows
Kestrel
vs IIS
相同平台不同宿主不同框架 间性能差距
4
ASP.NET Core
vs Python Django
Linux
Kestrel
vs uwsgi
相同平台不同语言不同宿主不同框架 间性能差距
5
ASP.NET Core
vs Java Servlet
Linux
Kestrel
vs Tomcat
相同平台不同语言不同宿主不同框架 间性能差距
6-1
ASP.NET Core
vs NodeJS Express
Linux
Kestrel
vs self host
相同平台不同语言不同宿主不同框架 间性能差距
6-2
ASP.NET Core
vs NodeJS Koa
Linux
Kestrel
vs self host
相同平台不同语言不同宿主不同框架 间性能差距
测试工具
工欲善其事,必先利其器。
首先我们需要一个压力测试工具,本次我们使用 wrk,有关于wrk的介绍和使用,请查看我的 这篇博客 。
然后我们需要一个性能监控工具,因为wrk已经会给我们输出吞吐量相关指标,所以我们只需要一个监控CPU,内存等的工具即可。本次我们使用 Windows 自带的性能监视器。
Windows 性能监视器的打开方式:开始-->运行-->perfmon
PS: 在下面的监视器图中如果你发现cpu并没有100%,那是因为使用的虚拟机占用了一部分cpu,所以计算方式应该是虚拟机的cpu使用量+物理机cpu使用量。
环境准备
既然做测试,首先肯定是具有相同的运行环境,以下是本次测试使用到的软件和硬件环境。
名称
操作系统
职责
CPU
核心数
内存
物理机器1
Windows 10 RS1
Web Server && 负载生成
Intel Core i5-4590
4
16G
虚拟机器2
Ubuntu Server 16.04
Web Server
Intel Core i5-4590
2
1G
虚拟机器3
Nano Server
Web Server
Intel Core i5-4590
2
1G
其中 虚拟机器2
为 “物理机器1” 使用 win 10 的 Hyper-v 技术搭建的一个虚拟机,所以有几个指标对于本次测试至关重要。
虚拟机设置为了2个虚拟核心,以便于在压力测试的过程中利用到多核特性。其中的虚拟机保留百分比,需要设置为100%,来分配两个物理cpu所有资源给它。占综系统资源百分比设置为50,也就是说虚拟机最多利用本地50%的CPU资源,虚拟机限制设置为100。
AspNet 在 GitHub 有一个开源的性能测试项目叫benchmarks ,之前新闻中23倍的性能也是出自于本测试项目, 为了客观,本次测试并不使用该项目,所有项目均我们自己新建,并且使用当前流行的框架,为了排除代码因素的干扰,我们使用最简单的 Hello World!。
如果你觉得本代码不够客观公正,欢迎在GitHub上Fork本项目,修改后给我提交PR,我会重新进行测试,并且更新本博客。
GitHub: https://github.com/yuleyule66/AspNetCoreBenchmarksCompare
开始测试
wkr命令参数:
wrk -t 2 -c 50 -d 20 --latency http: //xxx
因为已经分配了2个核心给虚拟机使用,所以开的是双线程。使用这个参数是我经过多次测试,得到的一个最佳的模拟效果。
1 - ASP.NET Core vs ASP.NET Core(Kestrel vs IIS)
ASP.NET Core
环境:物理机器1
OS:Windows 10 RS 1
Host:Kestrel
wrk -t 2 -c 50 -d 20 --latency http: //localhost:5000 Running 20 s test @ http: //localhost:5000 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.49 ms 21.72 ms 358.18 ms 98.99 % Req/Sec 23.28 k 1.98 k 27.48 k 92.13 % Latency Distribution 50 % 0.00 us 75 % 6.87 ms 90 % 12.76 ms 99 % 28.58 ms 913567 requests in 20.02 s, 115.00 MB read Requests/sec: 45636.43 Transfer/sec: 5.74 MB
ASP.NET Core
环境:物理机器1
OS:Windows 10 RS 1
Host:IIS 10.0
wrk -t 2 -c 50 -d 20 --latency http: //localhost:5001 Running 20 s test @ http: //localhost:5001 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.30 ms 5.81 ms 22.24 ms 76.75 % Req/Sec 7.61 k 455.21 8.12 k 90.00 % Latency Distribution 50 % 3.14 ms 75 % 9.02 ms 90 % 15.62 ms 99 % 17.17 ms 302880 requests in 20.02 s, 44.77 MB read Requests/sec: 15130.97 Transfer/sec: 2.24 MB
总结 :
QPS(Kestrel):45636.43 QPS(IIS):15130.97
这个结果难免令人诧异,程序部署在IIS上和使用Kestrel竟然差别如此之大,我们知道实际上即便部署在IIS上,实际上内部还是调用的Kestrel,但是测试结果告诉了我们答案。可能是由于IIS进一步的http封装导致的吧,毕竟IIS提供了那么多的其他功能。
以下是Windows的性能监视器,两个的曲线图差不多我就放一个了:
2 - ASP.NET Core vs ASP.NET(IIS vs IIS)
ASP.NET Core
环境:物理机器1
OS:Windows 10 RS
Host:IIS
wrk -t 2 -c 50 -d 20 --latency http: //localhost:5001 Running 20 s test @ http: //localhost:5001 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.30 ms 5.81 ms 22.24 ms 76.75 % Req/Sec 7.61 k 455.21 8.12 k 90.00 % Latency Distribution 50 % 3.14 ms 75 % 9.02 ms 90 % 15.62 ms 99 % 17.17 ms 302880 requests in 20.02 s, 44.77 MB read Requests/sec: 15130.97 Transfer/sec: 2.24 MB
ASP.NET
环境:物理机器1
OS:Windows 10 RS
Host:IIS
.NET Framework 4.6 + MVC5
wrk -t 2 -c 50 -d 20 --latency http: //localhost:10280 Running 20 s test @ http: //localhost:10280 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 4.94 ms 5.58 ms 22.82 ms 80.90 % Req/Sec 9.10 k 444.04 9.42 k 95.00 % Latency Distribution 50 % 3.00 ms 75 % 10.10 ms 90 % 13.57 ms 99 % 16.45 ms 362177 requests in 20.00 s, 89.80 MB read Requests/sec: 18104.50 Transfer/sec: 4.49 MB
总结 :
QPS(ASP.NET Core + IIS):15130.97 QPS(ASP.NET + IIS):18104.50
看到这个结果的时候,其实我还是有一点小惊讶的,不仅仅是因为ASP.NET跑出了1.8K QPS这样的成绩,而是通过Stdev
可以看出,ASP.NET 在应对高请求高并发的时候,还是相当的稳定的。这个结果说明了,在同样Windows+IIS环境中,ASP.NET是具有优势和竞争力的,可以预见 ASP.NET 应该还不会淘汰的太快。
Windows性能图我就不上了,基本上和上面一样 CPU 100% 的使用率。
3 - ASP.NET Core vs ASP.NET(Kestrel vs IIS)
ASP.NET Core
环境:物理机器1
OS:Windows 10 RS 1
Host:Kestrel
wrk -t 2 -c 50 -d 20 --latency http: //localhost:5000 Running 20 s test @ http: //localhost:5000 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.49 ms 21.72 ms 358.18 ms 98.99 % Req/Sec 23.28 k 1.98 k 27.48 k 92.13 % Latency Distribution 50 % 0.00 us 75 % 6.87 ms 90 % 12.76 ms 99 % 28.58 ms 913567 requests in 20.02 s, 115.00 MB read Requests/sec: 45636.43 Transfer/sec: 5.74 MB
ASP.NET
环境:物理机器1
OS:Windows 10 RS
Host:IIS
.NET Framework 4.6 + MVC5
wrk -t 2 -c 50 -d 20 --latency http: //localhost:10280 Running 20 s test @ http: //localhost:10280 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 4.94 ms 5.58 ms 22.82 ms 80.90 % Req/Sec 9.10 k 444.04 9.42 k 95.00 % Latency Distribution 50 % 3.00 ms 75 % 10.10 ms 90 % 13.57 ms 99 % 16.45 ms 362177 requests in 20.00 s, 89.80 MB read Requests/sec: 18104.50 Transfer/sec: 4.49 MB
总结
QPS(ASP.NET Core + Kestrel):45636.43
QPS(ASP.NET + IIS):18104.50
这个结果应该是在预料之中的,大概是3倍的性能差距吧。但是我觉得和之前微软宣传的23倍的性能,是有很大差距的。
4 - ASP.NET Core vs Python Django
注意 ,以下我们开始使用到虚拟机器2了,我们要在Windows性能监控器里面查看CPU使用率,还需要再添加2个计数器。
物理处理器 \Hyper-V Hypervisor Logical Processor(*) %Total Run Time
虚拟处理器 \Hyper-V Hypervisor Virtual Processor(*) %Guest Run Time
ASP.NET Core
环境:虚拟机器2
OS:Linux
Host:Kestrel
wrk -t 2 -c 50 -d 20 --latency http: //192.168.2.48:5000/ Running 20 s test @ http: //192.168.2.48:5000/ 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 4.39 ms 5.33 ms 33.05 ms 77.20 % Req/Sec 13.43 k 1.32 k 17.95 k 74.75 % Latency Distribution 50 % 2.00 ms 75 % 8.15 ms 90 % 13.75 ms 99 % 15.80 ms 534787 requests in 20.01 s, 67.32 MB read Requests/sec: 26730.83 Transfer/sec: 3.37 MB
Python Django
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:18026| 2023-10-27
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9593| 2022-11-06
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8140| 2022-11-06
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8522| 2022-11-06
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8425| 2022-11-06
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9330| 2022-11-06
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8389| 2022-11-06
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:7823| 2022-11-06
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8379| 2022-11-06
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7370| 2022-11-06
请发表评论