HTML5技术

ASP.NET Core 性能对比评测(ASP.NET,Python,Java,NodeJS) - Savorboard

字号+ 作者:H5之家 来源:H5之家 2016-10-20 10:00 我要评论( )

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

前言

性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检。比如我们在购买手机、显卡、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 技术搭建的一个虚拟机,所以有几个指标对于本次测试至关重要。

    image

    虚拟机设置为了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

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

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

    ASP.NET Core

    wrk -t 2 -c 50 -d 20 --latency :5000 Running 20s test @ :5000 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.49ms 21.72ms 358.18ms 98.99% Req/Sec 23.28k 1.98k 27.48k 92.13% Latency Distribution 50% 0.00us 75% 6.87ms 90% 12.76ms 99% 28.58ms 913567 requests in 20.02s, 115.00MB read Requests/sec: 45636.43 Transfer/sec: 5.74MB

    ASP.NET Core

    wrk -t 2 -c 50 -d 20 --latency :5001 Running 20s test @ :5001 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.30ms 5.81ms 22.24ms 76.75% Req/Sec 7.61k 455.21 8.12k 90.00% Latency Distribution 50% 3.14ms 75% 9.02ms 90% 15.62ms 99% 17.17ms 302880 requests in 20.02s, 44.77MB read Requests/sec: 15130.97 Transfer/sec: 2.24MB

    总结:

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

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

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

    image

  • 红色:CPU使用率
  • 蓝色:内存使用率
  • 2 - ASP.NET Core vs ASP.NET(IIS vs IIS)

    ASP.NET Core

    wrk -t 2 -c 50 -d 20 --latency :5001 Running 20s test @ :5001 2 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.30ms 5.81ms 22.24ms 76.75% Req/Sec 7.61k 455.21 8.12k 90.00% Latency Distribution 50% 3.14ms 75% 9.02ms 90% 15.62ms 99% 17.17ms 302880 requests in 20.02s, 44.77MB read Requests/sec: 15130.97 Transfer/sec: 2.24MB

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • ASP.NET Aries 4.0 开源发布:已完成基础功能优化重写 - 路过秋天

      ASP.NET Aries 4.0 开源发布:已完成基础功能优化重写 - 路过秋天

      2016-10-19 17:00

    • Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现 - Fonour

      Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的

      2016-09-26 14:00

    • asp.net mvc signalr 简单聊天室 - liuhz

      asp.net mvc signalr 简单聊天室 - liuhz

      2016-09-25 17:02

    • ASP.NET Core MVC 配置全局路由前缀 - Savorboard

      ASP.NET Core MVC 配置全局路由前缀 - Savorboard

      2016-09-25 11:00

    网友点评
    t