.net core 2.0性能 .net core效率

发布时间:2024-11-22 00:15

参加C#程序员认证,提升在.NET框架下的编程能力 #生活技巧# #工作学习技巧# #工作技能认证#

前言

性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检。比如我们在购买手机、显卡、CPU等的时候,可能会更加的关注于这样指标,所以本篇就来做一个性能评测。

性能也一直是我们开发人员一直追求的一个目标,我们在做语言选择,平台选择,架构选择的过程中都需要在性能之间做衡量。

同样性能对 .NET Core 团队来说也是至关重要的,一项新技术的诞生,除了对生产力的提高,还有技术团队对性能的追求。

今天,我们就来做一个对比测试,来看看微软的这样新技术性能到底怎么样,俗话说的好:“是骡子是马,拉出来溜溜”。

下面让我开始吧。

目录

测试目标测试工具环境准备开始测试 ASP.NET Core Kestrel vs ASP.NET Core IIS ASP.NET Core IIS vs ASP.NET IIS ASP.NET Core Kestrel vs ASP.NET IIS ASP.NET Core vs Python Django ASP.NET Core vs Java Servlet ASP.NET Core vs NodeJS总结

测试目标

在测试之前,我们必须要明确我们本次测试想达到的一个目标。本次测试主要是测试应用程序的一个吞吐量。其中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

其中 虚拟机器2 为 “物理机器1” 使用 win 10 的 Hyper-v 技术搭建的一个虚拟机,所以有几个指标对于本次测试至关重要。

.net core 2.0性能 .net core效率_.NET

虚拟机设置为了2个虚拟核心,以便于在压力测试的过程中利用到多核特性。其中的虚拟机保留百分比,需要设置为100%,来分配两个物理cpu所有资源给它。占综系统资源百分比设置为50,也就是说虚拟机最多利用本地50%的CPU资源,虚拟机限制设置为100。

源代码

AspNet 在 GitHub 有一个开源的性能测试项目叫benchmarks,之前新闻中23倍的性能也是出自于本测试项目, 为了客观,本次测试并不使用该项目,所有项目均我们自己新建,并且使用当前流行的框架,为了排除代码因素的干扰,我们使用最简单的 Hello World!。

如果你觉得本代码不够客观公正,欢迎在GitHub上Fork本项目,修改后给我提交PR,我会重新进行测试,并且更新本博客。

GitHub:  https://github.com/yuleyule66/AspNetCoreBenchmarksCompare

开始测试

wkr命令参数:

因为已经分配了2个核心给虚拟机使用,所以开的是双线程。使用这个参数是我经过多次测试,得到的一个最佳的模拟效果。

1 - ASP.NET Core vs ASP.NET Core(Kestrel vs IIS)

ASP.NET Core

环境:物理机器1OS:Windows 10 RS 1Host:Kestrel

ASP.NET Core

环境:物理机器1OS:Windows 10 RS 1Host:IIS 10.0

总结

QPS(Kestrel):45636.43 QPS(IIS):15130.97

这个结果难免令人诧异,程序部署在IIS上和使用Kestrel竟然差别如此之大,我们知道实际上即便部署在IIS上,实际上内部还是调用的Kestrel,但是测试结果告诉了我们答案。可能是由于IIS进一步的http封装导致的吧,毕竟IIS提供了那么多的其他功能。

以下是Windows的性能监视器,两个的曲线图差不多我就放一个了:

.net core 2.0性能 .net core效率_Java_02

红色:CPU使用率蓝色:内存使用率

2 - ASP.NET Core vs ASP.NET(IIS vs IIS)

ASP.NET Core

环境:物理机器1OS:Windows 10 RSHost:IIS

ASP.NET

环境:物理机器1OS:Windows 10 RSHost:IIS.NET Framework 4.6 + MVC5

总结

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

环境:物理机器1OS:Windows 10 RS 1Host:Kestrel

ASP.NET

环境:物理机器1OS:Windows 10 RSHost:IIS.NET Framework 4.6 + MVC5

总结

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

环境:虚拟机器2OS:LinuxHost:Kestrel

.net core 2.0性能 .net core效率_.net core 2.0性能_03

Python Django

环境:虚拟机器2OS:LinuxHost:uwsgiPython 2.7.12 + Django 1.10.2

服务端宿主运行命令:

结果:

.net core 2.0性能 .net core效率_.net core 2.0性能_04

总结

QPS(ASP.NET Core + Kestrel):26730.83

QPS(Python Django + Kestrel ):1572.64

不知道是我运行的方式不对还是怎么,这个差距还是蛮大的,大概是17倍的差距。看来Python Web 在做针对于做大请求并发情况下,还是弱了一点。

5 - ASP.NET Core vs Java Servlet

C# 和 JAVA 一直是两大阵营的开发人员喜欢讨论的话题,为了避免有阵营偏见,JAVA的源代码是我委托我们一个JAVA同事编写的,并且委托由他部署的,并且已经交代了他避免使用jsp,由Servlet直接输出。

ASP.NET Core

环境:虚拟机器2OS:LinuxHost:Kestrel

.net core 2.0性能 .net core效率_.net core 2.0性能_03

Java Servlet

环境:虚拟机器2OS:LinuxHost:Tomcat 7.0 + jdk 1.7

.net core 2.0性能 .net core效率_.net core 2.0性能_06

总结

QPS(ASP.NET Core + Kestrel):26730.83

QPS(Java Servlet + Tomcat):18338.73

通过这个结果我们可以看出,在性能上 ASP.NET Core 已经超越了Java。不说太多了,怕被喷...

6 - ASP.NET Core vs NodeJS

ASP.NET Core

环境:虚拟机器2OS:LinuxHost:Kestrel

NodeJS

环境:虚拟机器2OS:LinuxHost:self host

.net core 2.0性能 .net core效率_Node.js_07

***************更新1:NodeJS 添加Web框架*******

Express框架,cluster模式

Koa框架,cluster模式

从测试结果可以看出,Koa框架性能略高于Express框架。

**************End***********

总结

QPS(ASP.NET Core + Kestrel):26730.83

QPS(NodeJS):20522.89 (非cluster模式) QPS(NodeJS Express):15583.99 (cluster模式) QPS(NodeJS Koa):17478.73 (cluster模式)

这个结果着实让我吃了一惊,NodeJS性能竟然如此惊人,比JAVA要快10%。作为一个解释性语言这个性能可以说达到了极致,虽然在测试之前知道NodeJS采用的是异步IO,但还是被测试结果震惊了。

===========更新1=========

NodeJS 在加入了Web框架之后,性能仍然不弱。

不知道是不是因为NodeJS没有经过什么Web框架,直接输出的结果。所以我需要再加测一个ASP.NET Core 通过中间件直接输入结果的性能,这次我要使用微软的测试项目benchmarks。

My God !!!

总结

以下是测试结果的汇总统计:

编号

对比方

系统环境

宿主环境

测试结果(QPS)

1

ASP.NET Core vs ASP.NET Core

Windows

Kestrel vs IIS

45.6k vs 15.2k

2

ASP.NET Core vs ASP.NET

Windows

IIS vs IIS

15.2k vs 18.2k

3

ASP.NET Core vs ASP.NET

Windows

Kestrel vs IIS

45.6k vs 18.2k

4

ASP.NET Core vs Python Django

Linux

Kestrel vs uwsgi

26.7k vs 1.57k

5

ASP.NET Core vs Java Servlet

Linux

Kestrel vs Tomcat

26.7k vs 18.3k

6-1

ASP.NET Core vs NodeJS Express

Linux

Kestrel vs self host

26.7k vs 15.6k

6-2

ASP.NET Core vs NodeJS Koa

Linux

Kestrel vs self host

26.7k vs 17.5k

.net core 2.0性能 .net core效率_Node.js_08

作为微软的下一代 ASP.NET 框架,ASP.NET Core没有让我们失望,通过本次测试,我们大概对ASP.NET Core的性能心里有底了。一个圈子的良好发展需要社区的共同参与,也希望大家共同为.NET Core社区贡献自己的力量,同时也希望看到本篇文章的CTOs们以后在平台和框架选择的过程中考虑一下ASP.NET Core,因为她真的很优秀。

========更新1 :2016-10-17 感谢园友“幻天芒” 关于NodeJS的贡献======

有园有反应NodeJS项目没有使用web mvc框架,所以特更新,同时感谢 "幻天芒" 在github向nodeJS项目提交的PR。

1、添加node 多核cpu cluster 模式 2、添加node koa框架和express框架测试

更新测试结果。

网址:.net core 2.0性能 .net core效率 https://www.yuejiaxmz.com/news/view/182355

相关内容

.net元搜索引擎详解资源
.net socket.io客户端使用过程
.NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
家庭财务管理系统研究背景、目的与意义
家庭 健身计划表
C#最全资料
住宅小区的拓扑规划与网络设计(完整文档+ensp拓扑图)
系统发生错误
绿色家居进万家,健康普惠中国行!深度解码欧派“健康+3.0”战略
节电器系列产品今年的新功能

随便看看