ASP.NET 写的老网站,在 Windows 2008 R2 下稳稳十万并发,升级 Windows 2019 后响应非常缓慢, 600 并发就卡死,配置都没动过,有什么排查的方法吗?研究了一天还没解决。

2022-08-18 23:45:57 +08:00
 edis0n0
7547 次点击
所在节点    程序员
94 条回复
lambdaq
2022-08-19 15:36:07 +08:00
@jiulang 1995 年发布的 WinNT 就内核支持 IOCP 了。比 async await 更先进性能更高。。。23333
jiulang
2022-08-19 15:40:45 +08:00
@lambdaq 你可以理解 async await 为应用层的 iocp ,应用层如果还是同步 IO ,木桶的短板就短在里了,这时底层是不是 IOCP 可能都不是短板了。
jiulang
2022-08-19 15:52:21 +08:00
http.sys 你可以理解为饭店材料的供应商,他们工作高效,保证供应链供给充足。
asp.net 的工作线程,你可以理解为厨师们,他们负责炒菜给客人;
如果这些线程是同步 IO 工作,那么就像一个厨师为一桌客人做好菜之后,还要等客人边吃边中途继续加菜,直到客人吃饱喝足之后走人了,才能开始为下一桌客人继续做菜一样;但如果这些线程是异步 IO 工作,那就像厨师为一桌客人做好菜之后,就结束工作了,空闲的他如果有人通知他继续做菜,他就继续干活。相同的数量的厨师,异步 IO 可以让工作线程从无畏地等待中解放出来,干更多有意义的工作。
shuimugan
2022-08-19 16:10:13 +08:00
“你电脑内存多大”
“1T”
“哈哈哈真是小白,哪来 1T 的内存,那是硬盘”
“没错啊(打开机箱亮出主板上 8 条 128G ECC 内存)”

“你项目多大并发”
“10 万”
“哈哈哈你知道 10 万并发是什么概念吗”
“没错啊(打开日志 /监控上的某一时间范围的数据统计,那里显示着峰值时每秒有 10 万次左右的请求)”

异曲同工之妙( dog
krixaar
2022-08-19 16:11:46 +08:00
@hutoer #29 OP 提的是响应,所以应该是是 10W QPS/RPS 吧……
gearfox
2022-08-19 16:34:28 +08:00
@shuimugan 哈哈哈哈哈
gam2046
2022-08-19 16:41:52 +08:00
我自己的应用,每分钟大概 8 万个请求,平均下来每秒 1000 多个请求,我已经快嗝屁了。能力范围内的各种优化用尽,只能加配置了。请求里处理的 IO 全都移到内存里,才勉强在渣渣的阿里云 2 核机器上跑起来。现在长期 CPU 负载 70%以上
zjsxwc
2022-08-19 16:54:35 +08:00
Handling many concurrent connections is a different problem to handling many requests per second.

前者是指 C10k/C100k ,后者是指 10 万 /100 万并发,区别在于后者需要 1 秒内处理完且返回数据,所以后者还涉及的一个问题是网络带宽,比如一个一秒内 10 万并发请求,每个请求传输包含 4kByte 数据,那么 10 万并发请求一秒内需要传输 40 万 kByte ,也就是 400*8 = 3200 M Byte 即 3.2 Gbps 带宽。
mmdsun
2022-08-19 17:02:34 +08:00
@bsg1992 @tramm @ruoduan @monkeyWie @xiaopingbeichen

超越 nginx 这是有可能的。单机 c10k, c100k 都是早就解决的问题。
还有就是系统并发模型不同。Reactor 和 Proactor 模型。

Windows 的 Proactor 模型用的好,理论上高并发要比 Linux Reactor 的应用要性能高。Linux 的 io_uring 内核 5.1 引入,主流应用还是 select poll epoll 。但 Win 的 IOCP 很早就有了。
hutoer
2022-08-19 17:04:30 +08:00
@krixaar 你说的对。了解了 C100K ,10 万 QPS/RPS 就没那么惊讶了。OP 没说业务逻辑,服务器具体配置,所以不好评价。
nothingistrue
2022-08-19 17:11:51 +08:00
@yazoox #32 @ng29 #27
以前有一个 Socket 编程,具体是那个我也忘了,可能从来都是谬传,它的编程模型是服务器用一个端口监听,然后每来一个客户端就用另一个端口跟客户端反向连接用来维持跟客户端的连接。这种模型下,服务器端的并发连接数,自然要受端口数的限制。

但是上面这个是 Socket 编程模型的规定,不是 TCP 通信协议的规定。TCP 协议使用 4 元组来区分不同的连接的,这 4 元组是目的 IP 地址、目的端口号、源 IP 地址和源端口号,换更容易的说法,是 服务器 IP 、服务器端口、客户端 IP 、客户端端口。这意味着,你可以在服务器 IP 、服务器端口不变的情况下,通过客户端 IP + 客户端端口来区分不同的连接。故,理论上,你可以只是用一个端口,支撑无限大的并发连接。实际上当然不能支撑无限大的并发连接量,这个还要看服务器的硬件配置和操作系统对 TCP 连接的支撑模型。


另外,以上还没涉及负载均衡,如果涉及了,还要考虑负载均衡程序的编程模型。
abuabu
2022-08-19 17:24:02 +08:00
且不论十万并发到底行不行,问题的核心难道不是 win2008 r2 到 win 2019 响应缓慢吗?

大家到底是阅读理解不过关还是对线多了,回避内容核心顾左右而言已经成为本能?
hutoer
2022-08-19 17:28:50 +08:00
举个例子(假的)

某公司有 20 个 App ,每个 App 产品页面要显示 50 条留言,留言中要根据 IP 显示地区信息,每个产品页的并发请求是 100 ,如果开发 IP 查询服务,需要并发数:

20 * 50 * 100 = 10 万并发

大家看,10 万并发也不是很离谱的需求
dfkjgklfdjg
2022-08-19 17:31:40 +08:00
@abuabu #52 ,因为冷嘲热讽是传统艺能了。
cominghome
2022-08-19 17:44:26 +08:00
@abuabu 你这也太圣人了。就好比你看到个帖子标题“换了双跑鞋,百米跑不进 10s 了,怎么回事?” 你第一反应真的是帮他研究新旧跑鞋的区别?
lambdaq
2022-08-19 17:49:57 +08:00
@cominghome 第一反应是看看这发帖 id 是不是博尔特
kinboy
2022-08-19 18:00:10 +08:00
哈哈哈围观求助帖变成 10w 并发讨论帖
LeegoYih
2022-08-19 18:15:46 +08:00
怎么聊到 C10K C100K C1000K 了?
并发数和连接数根本就是 2 个概念
krixaar
2022-08-19 18:22:33 +08:00
@abuabu #52 OP 可是稳稳单机 10W 并发而且楼下回复说没有问题,有这个级别的硬件和带宽,在 v2 发帖为啥不直接问他们的技术支持团队呢……
而且问这种模糊的问题啥具体信息也没给( IIS 配置 /硬件配置是否有变化,并发场景是否一致,系统里其它软件版本,部分脱敏 log 之类),让人怎么去认真回答🤣
killerv
2022-08-19 18:23:45 +08:00
@shuimugan 每秒 10 万次请求,应该是 QPS ;并发不是这个意思,是同时有 10 万个请求

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/873862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX