ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

我们知道 Asp.net Core 在 windows 服务器上部署的方案有 4 种之多。这些部署方案对性能的影响一直以来都是靠经验。比如如果是部署在 IIS 下,那么 In Process 会比 Out Process 快;如果是 Self Host 那么使用 HttpSys 服务器会比 Kestrel 快。那么真实结果是否如我们想象的那样呢?接下来就让我们来做一次 benchmarks 吧。

托管模型

在开始 benchmark 测试之前,我们再来来介绍一下这 4 种托管模型:

1. InProcess 模式

InProcess 模式将 ASP.NET Core 应用程序直接部署在 IIS 中,与 IIS 工作进程相同的进程中运行。理论上,这种模式的性能应该相对较高,因为请求无需经过额外的进程通信。

2. OutProcess 模式

OutProcess 模式下,ASP.NET Core 应用程序在独立于 IIS 工作进程的进程中运行。这种模式通过进程间通信与 IIS 进行通信,理论上可能引入一些性能开销。

3. SelfHost HttpSys 模式

HttpSys 模式是一种自承载方式,利用 Windows 操作系统内核级的 HTTP 服务器。通常认为在处理大量并发连接时具有优势,因为它与操作系统集成。

4. SelfHost Kestrel 模式

Kestrel 模式是 ASP.NET Core 的内置 Web 服务器,可以独立运行而无需依赖其他外部服务器。Kestrel 是轻量级、跨平台的选择,专为处理大量并发连接而设计。

压测平台

  • 操作系统: Windows Server 2012 R2 Datacenter

  • 硬件配置: Intel E3 1260L CPU, 16GB 内存

  • 网络: 家庭内网,TP-LINK 家用 1000M 交换机

因为本人没啥高性能的服务器,家里只有一台老旧的 HP Gen8 服务器。安装 windows server 2012 R2 datacenter,CPU 为 E3 1260L。E3 同样是古董,大概是 intel 10年前的产品。内存为 16G 1333 服务器专用内存。整个测试平台可以说是相当拉跨。凑合用用吧,反正不是彪极限性能,横向对比的话问题不大

压测过程

新建一个 ASP.NET Core 默认项目。采用 VS2022 自带的模板,使用 miniapi 对 '/' 路径直接输出 'Hello World!' 字符串。

using System.Diagnostics;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

var app = builder.Build();

// Configure the HTTP request pipeline.

app.MapGet("/", () =>
{
    return "Hello World!";
});

app.Run();

如果使用 HttpSys 服务器则多加一行代码:

builder.WebHost.UseHttpSys();

  • 测试工具: 使用 Netling 进行压力测试,模拟真实用户请求。

  • 测试流程: 在对每个场景进行测试前先进行 60s 的预热,等待大概 10s 再后进行 4 次持续的压力测试(8个线程,持续30s),记录结果(RPS)。

Benchmark 测试结果

以下是测试结果:

性能分析与总结

测试结果大大的出乎了我的预料,特别是 OutProcess 模式的性能略高于 InProcess 模式,与我的认知出现了比较大的偏差。同时,SelfHost Kestrel 模式的性能优于 SelfHost HttpSys 模式,这也与一般的预期不同,因为 HttpSys 是运行在内核态的服务器。

这样的差异可能受多种因素影响,包括硬件配置、操作系统版本、IIS的版本等,毕竟这些产品都是10年前的产物,而 ASP.NET Core8 是 2023 年的全新产品。测试结果受到多种因素的影响,大家不要较真,就图一乐吧。

不过从结果上横向来看,至少可以得出以下结论:

  • Self Host 比 IIS Host 性能上要快上好几倍。在追求极限性能的场景,应该选择 Self Host。

  • IIS Host 不管是 In Process 还是 Out Process 性能也不差。就测试平台这种老古董也能跑个 7000+ RPS。这还不是极限,因为 7000 RPS 的时候 CPU 才到 50%+ 。如果我再多加一些线程,相信轻松可以过万。

  • 以上最差的结果也有 7000 多的 RPS。这表明对于一般的信息系统而言,ASP.NET Core 本身的性能一般不会是瓶颈。瓶颈最早出现一定是在其他 IO 模块,比如数据库。

文章转载自:Agile.Zhou

原文链接:https://www.cnblogs.com/kklldog/p/aspnetcore-benchmarks.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始搭建企业管理系统(六):RBAC 权限管理设计

RBAC 权限管理设计 前言权限分类功能权限设计什么是 RBACRBAC 组成RBAC 模型分类基本模型RBAC0角色分层模型RBAC1角色限制模型RBAC2统一模型RBAC3 RBAC0 权限设计用户管理角色管理权限管理关联表 总结 前言 作为一个后台管理系统,权限管理是一个绕不开的话题&#…

[Linux基础知识]页表

文章目录 1.页表 环境变量2.进程 1.页表 环境变量 一个分页存储管理系统中,地址长度为 32 位,其中页号占 8 位,则页表长度是 页号即页表项的序号,总共占8个二进制位,意味着页表项的个数就是2^8 在CPU和物理内存之间进行…

基于ssm高校教师科研信息展示网站论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师科研项目展示信息管理混乱,出错率高&#xff0c…

【23真题】难!最后的几所985!

今天分享的是23年天津大学815的信号与系统试题及解析!985的题目做一套少一套,考研前我也发不了几所985的真题了,大家珍惜! 本套试卷难度分析:22年天津大学815考研真题,我也发布过,若有需要&…

聚首引领行业风潮!聚首品牌联动资源价值平台发布会正式启航

2023年12月10日,由杭州建筑装饰学会、浙江聚首联优材料科技有限公司主办,天尚设计集团、公和设计集团、铭扬工程设计集团、地标设计集团、上宸工程设计集团、华坤建筑设计院、广厦建筑设计研究院、上海传承博华建筑规划设计院、航冠工程设计院、浙江鸿能…

SQL进阶 | CASE表达式

本文所有案例基于《SQL进阶教程》实现。 概述 SQL中的CASE表达式是一种通用的条件表达式,类似于其他语言中的if/else语句。它用于在SQL语句中实现条件逻辑。CASE表达式以WHEN子句开始,后面跟着一个或多个WHEN条件,每个WHEN条件后面跟着一个TH…

【S32DS RTD实战】-1.3-S32K3工程生成S19,BIN,Hex文件,以及Post-build steps的妙用

目录 1 方法一:逐个生成Motorola S-record(s19,srec…),Intel HEX,Bin文件 1.1 生成Motorola S-record(s19,srec…)文件 1.2 生成Intel HEX文件 1.3 生成Bin文件 2 …

关于 SAP S/4HANA 中的控制您应该了解什么-Part1

原文地址:What you should know about controlling in SAP S/4HANA. (Part 1) | SAP Blogs (自 SAP S/4HANA 版本 1909 起更新) 作为一名CO顾问,我对 SAP ERP 中央组件 (ECC) 向 SAP S/4HANA 的演变感到非常兴奋。 自从第一个版…

深入理解JVM虚拟机第二十八篇:详解JVM当中方法重写的本质和虚方法表

😉😉 欢迎加入我们的学习交流群呀: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群&a…

Unity中结构体定义的成员如何显示在窗口中

在Unity中,有时候我们在处理数据的时候会用到结构体定义一些Unity组件相关的数据成员,并且需要在编辑器中拉取对象赋值。比如: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;publ…

正则表达式(9):扩展正则表达式

正则表达式(9):扩展正则表达式 小结 本博文转载自 前文中一直在说,在Linux中,正则表达式可以分为”基本正则表达式”和”扩展正则表达式”。 我们已经认识了”基本正则表达式”,现在,我们来认…

笔记本电脑安装了Ubuntu系统设置关盖/合盖不挂起/不睡眠

文章目录 简介通过gnome-tweaks设置通过更改登录配置文件logind.conf设置参考资料 简介 学习工作中需要用到笔记本安装Ubuntu Linux系统,并且需要关盖电脑不关机、不挂起且不睡眠。为此,本篇博客整理了两种常规操作方式,并给了详细的步骤&am…

windows10安装MongoDB的入门简易教程【学习自用】

一、下载安装包 下载地址 https://www.mongodb.com/try/download/community 因为我是在windows上安装,所以下载windows版本的压缩包格式 二、下载后解压到要安装的目录里去 我这里在D盘装,所以就解压到D盘中我自己建的的mongoDB文件夹中。 三、在解…

网络安全攻击预警/态势预测算法汇总

总结: 网络安全攻击预警/态势预测算法众多,主要包括: 基于统计学的算法:协方差矩阵、马尔可夫模型等; 基于机器学习的算法:贝叶斯网络、聚类算法、支持向量机SVM、遗传算法、层次分析法AHP、决策树等&am…

LeetCode 每日一题 Day 10 || 并查集/二分搜索

1631. 最小体力消耗路径 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注…

案例056:基于微信小程序的购物系统

文末获取源码 开发语言:PHP 框架:Think PHP 数据库:mysql 5.7 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者工具 目录 前言 系统展示 后台模块的实现 用户信息管理 商品信…

USB Type-C一拖二线缆制作方法

1 实现方法 Figure 1-1 Type-C Socket(母口) Figure 1-2 Type-C Plug(公头) Table 1-1 Type-C Socket Pin连接描述 Type-C Plug连接, 需要做一个一拖二的线,一根的一端是USB, 另外一根的一端是USB转UART, 参考Table 1-2。 Table 1…

windows MYSQL解决中文乱码问题

1.首先确保你已经把mysql配置了环境变量 2.打开window终端 3.输入mysql -u root -p 4.输入密码,就是安装的时候设置的root超级管理员权限密码 5.输入: SHOW VARIABLES LIKE ‘character%’; 出现上图,说明就会出现中文乱码问题。 6.该怎么办…

31、卷积 - 参数 dilation 以及空洞卷积

在卷积算法中,还有一个不常见的参数叫做dilation(中文:膨胀)。 很多同学可能没听说过这个参数,下面看看这个参数有什么作用,用来控制什么的。 我们还是放这个经典的卷积运算图,图中是看不出 dilation 这个参数的存在的。 如果再换一张图呢,发现两图的区别了吗? 没错…

JavaDay17

创建不可变集合 import java.util.Iterator; import java.util.List;public class Test {public static void main(String[] args) {/*创建不可变的List集合* "张三" "李四" "王五" "赵六*///一旦创建之后 是无法进行修改的 在下面的代码…