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

2022-08-18 23:45:57 +08:00
 edis0n0
7246 次点击
所在节点    程序员
94 条回复
charlie21
2022-08-19 11:32:05 +08:00
环境和版本
nothingistrue
2022-08-19 11:35:08 +08:00
在 unix/linux 下限制连接数的主要因素是内存和允许的文件描述符个数(每个 tcp 连接都要占用一定内存,每个 socket 就是一个文件描述符)。这个限制取决于服务器的配置,普通服务器 5 万就是极限了,再高得用贵死人的高性能服务器。而 Windows 环境,还是旧的 2008 系统,超过 5 万应该不是很容易的事。
dnsaq
2022-08-19 13:59:20 +08:00
阿里巴巴也都才刚刚实现了 20 万并发吧,10W 并发啥概念呀
nba2k9
2022-08-19 14:01:10 +08:00
@dnsaq 传下去,阿里巴巴用了两台服务器
Kinnice
2022-08-19 14:24:05 +08:00
上 ab bench 测试截图
q1angch0u
2022-08-19 14:28:35 +08:00
莫非楼主就是阿里 CTO ? [狗头]
ng29
2022-08-19 14:29:07 +08:00
lookStupiToForce
2022-08-19 14:38:58 +08:00
我也来围观一下单机十万并发是什么神仙做的系统
hutoer
2022-08-19 14:40:40 +08:00
v2ex 现在的风气不行,动不动的就冷嘲热讽。我估计回帖的人,很多都不知道 c100k 吧,麻烦去搜索一下。
zhangfeiwudi
2022-08-19 14:42:23 +08:00
能发下网址,围观下吗
lambdaq
2022-08-19 14:44:53 +08:00
10w 并发怎么这么多人围观?

实际上,Windows 的 IIS 性能非常之强很多人压根不了解,它丫的是用内核写了个驱动 http.sys 来实现的。linux 下 nginx 这种用户态的根本不能打,唯一能扳扳手腕估计只有上古的 khttpd 。。。。


windows 不能打的刻板印象怎么来的?默认的 Win server ,授权费没交够的,巨硬直接给你限制并发数为 5 。。。。。
yazoox
2022-08-19 14:50:29 +08:00
@nothingistrue 兄弟,你连续回复了两次,反而让我看迷糊了。能再多解释一下么?这个连接数和端口数的问题?
谢谢!
thtznet
2022-08-19 14:53:28 +08:00
wtfedc
2022-08-19 14:59:35 +08:00
我以为单机 c10k, c100k 都是早就解决了,c10k 在 2000 年左右就解决了,看到这么多人对 c100k 表示震惊,搞的我有点懵,又找了篇别人测试的文章,可以看看 https://zhuanlan.zhihu.com/p/21378825
wtfedc
2022-08-19 15:11:27 +08:00
随便找了个通用型的高配 ecs
实例规格 vCPU 内存( GiB ) 网络带宽基础 /突发( Gbit/s ) 网络收发包 PPS 连接数 多队列 弹性网卡 单网卡私有 IPv4 地址数 单网卡 IPv6 地址数 最大挂载数据盘数量 云盘 IOPS 基础 /突发 云盘带宽基础 /突发( Gbit/s )
ecs.g7se.32xlarge 128 512 32/无 1200 万 240 万 32 15 30 30 64 100 万 /无 64/无
elechi
2022-08-19 15:12:02 +08:00
估计 IIS 的问题,要不 framework 版本问题?
Itoktsnhc
2022-08-19 15:14:43 +08:00
可以先用类似 iperf3 的工具测下带宽,再看下网卡是不是有什么设置或者驱动更新
salmon5
2022-08-19 15:16:47 +08:00
c1000k 也老早不稀奇了,只是有人不经意间说出来,就像他真的有 10 万并发的业务一样
jiulang
2022-08-19 15:17:52 +08:00
姑且算十万是 RPS(Requests per second),单机能达到这个么高的,要么是无 IO 请求的快速同步操作,要么是使用了异步 IO 。当然,如果 IO 操作耗时很短,同步 IO 可能也得到这么高的 RPS ,但是只要 IO 操作的时长变长,同步 IO 就立刻表现为 RPS 倍数级降低。
所以我觉得可能是:老代码使用了同步 IO 去读取了文件、Db 或网络了,之前的环境里面,这些 IO 操作耗时不大,切换到新环境之后,这些 IO 操作的(因某些原因)耗时变大了,代码不变,还是以同步 IO 的方式调用,造成在相同的工作线程下,等待 IO 结果的时长变以,所以 RPS 跌落严重。
jiulang
2022-08-19 15:27:08 +08:00
如果你能告诉我:老代码没有使用 async await 异步,那么我们就以大概确定:你的 db 可能变慢了,而且慢的原因,可能是索引问题,或者磁盘问题。

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

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

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

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

© 2021 V2EX