前言
性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检。比如我们在购买手机、显卡、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 | ASP.NET Core vs NodeJS |
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 技术搭建的一个虚拟机,所以有几个指标对于本次测试至关重要。
虚拟机设置为了2个虚拟核心,以便于在压力测试的过程中利用到多核特性。其中的虚拟机保留百分比,需要设置为100%,来分配两个物理cpu所有资源给它。占综系统资源百分比设置为50,也就是说虚拟机最多利用本地50%的CPU资源,虚拟机限制设置为100。