V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edis0n0
V2EX  ›  程序员

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

  •  
  •   edis0n0 · 215 天前 · 6399 次点击
    这是一个创建于 215 天前的主题,其中的信息可能已经有所发展或是发生改变。
    94 条回复    2022-08-26 21:32:28 +08:00
    opengps
        1
    opengps  
       215 天前 via Android
    并发?
    edis0n0
        2
    edis0n0  
    OP
       215 天前
    @opengps #1 有什么问题吗?
    bsg1992
        3
    bsg1992  
       215 天前   ❤️ 2
    @edis0n0 你知道 10W 并发什么概念嘛
    chenbojian
        4
    chenbojian  
       215 天前 via Android
    IIS 参数变了?
    wxyrrcj
        5
    wxyrrcj  
       215 天前 via Android
    开玩笑呢 10w 并发
    idragonet
        6
    idragonet  
       215 天前
    很好奇是如何得到结论:Windows 2008 R2 下稳稳十万并发,有测试报告吗?
    PerFectTime
        7
    PerFectTime  
       215 天前
    单机 10w ??不是吧
    n0th1ng
        8
    n0th1ng  
       215 天前
    tramm
        9
    tramm  
       215 天前
    你这性能超过 Nginx 了
    salmon5
        10
    salmon5  
       215 天前
    什么?阿里巴巴的服务都跑在你这台 ASP.NET 写的老网站上?
    LeegoYih
        11
    LeegoYih  
       215 天前
    恐怖如斯
    yyyyyyh
        12
    yyyyyyh  
       215 天前   ❤️ 1
    无法对单机 10W 并发的大佬提出改善意见😒
    ikesnowy
        13
    ikesnowy  
       215 天前
    噗,去博客园的博问提问然后 at dudu 吧,他应该会回你的 hhhh
    xiaopingbeichen
        14
    xiaopingbeichen  
       215 天前
    我就是来凑个热闹,看看 10W 并发是长啥样的
    monkeyWie
        15
    monkeyWie  
       215 天前
    围观下单机 10W 并发
    AlexSLQ
        16
    AlexSLQ  
       215 天前
    udp 吗
    ruoduan
        17
    ruoduan  
       215 天前
    Nginx 理论 最大并发 5W ,单机十万并发 ?
    nothingistrue
        18
    nothingistrue  
       215 天前   ❤️ 1
    @edis0n0 #2 单机十万并发基本不可能,程序可以支持这么高,但硬件和操作系统底层是不支持的,端口号总共才 65535 个( Socket 连接时服务器只占用一个监听端口,但是对于每个客户端还得占用一个反向连接端口,原生 TCP 连接我不是太清楚)。
    Rocketer
        19
    Rocketer  
       215 天前 via iPhone
    我们当年 30 个并发就很不错了,10 万并发不敢想象。

    我猜楼主说的是每秒能处理的请求数吧?纯静态页面十万还是有可能的。
    nothingistrue
        20
    nothingistrue  
       215 天前
    @edis0n0 更正,原生 TCP 连接不受服务器端口号限制。TCP 使用由本地地址和远端地址组成的 4 元组:目的 IP 地址、目的端口号、源 IP 地址和源端口号来处理传入的多个连接请求。故,服务器只需要占用一个端口就可以负责监听和所有的连接。
    charlie21
        21
    charlie21  
       215 天前 via iPhone
    环境和版本
    nothingistrue
        22
    nothingistrue  
       215 天前
    在 unix/linux 下限制连接数的主要因素是内存和允许的文件描述符个数(每个 tcp 连接都要占用一定内存,每个 socket 就是一个文件描述符)。这个限制取决于服务器的配置,普通服务器 5 万就是极限了,再高得用贵死人的高性能服务器。而 Windows 环境,还是旧的 2008 系统,超过 5 万应该不是很容易的事。
    dnsaq
        23
    dnsaq  
       215 天前
    阿里巴巴也都才刚刚实现了 20 万并发吧,10W 并发啥概念呀
    nba2k9
        24
    nba2k9  
       215 天前   ❤️ 1
    @dnsaq 传下去,阿里巴巴用了两台服务器
    Kinnice
        25
    Kinnice  
       215 天前
    上 ab bench 测试截图
    q1angch0u
        26
    q1angch0u  
       215 天前
    莫非楼主就是阿里 CTO ? [狗头]
    ng29
        27
    ng29  
       215 天前
    lookStupiToForce
        28
    lookStupiToForce  
       215 天前
    我也来围观一下单机十万并发是什么神仙做的系统
    hutoer
        29
    hutoer  
       215 天前   ❤️ 4
    v2ex 现在的风气不行,动不动的就冷嘲热讽。我估计回帖的人,很多都不知道 c100k 吧,麻烦去搜索一下。
    zhangfeiwudi
        30
    zhangfeiwudi  
       215 天前
    能发下网址,围观下吗
    lambdaq
        31
    lambdaq  
       215 天前   ❤️ 13
    10w 并发怎么这么多人围观?

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


    windows 不能打的刻板印象怎么来的?默认的 Win server ,授权费没交够的,巨硬直接给你限制并发数为 5 。。。。。
    yazoox
        32
    yazoox  
       215 天前
    @nothingistrue 兄弟,你连续回复了两次,反而让我看迷糊了。能再多解释一下么?这个连接数和端口数的问题?
    谢谢!
    wtfedc
        34
    wtfedc  
       215 天前   ❤️ 1
    我以为单机 c10k, c100k 都是早就解决了,c10k 在 2000 年左右就解决了,看到这么多人对 c100k 表示震惊,搞的我有点懵,又找了篇别人测试的文章,可以看看 https://zhuanlan.zhihu.com/p/21378825
    wtfedc
        35
    wtfedc  
       215 天前
    随便找了个通用型的高配 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
        36
    elechi  
       215 天前
    估计 IIS 的问题,要不 framework 版本问题?
    Itoktsnhc
        37
    Itoktsnhc  
       215 天前
    可以先用类似 iperf3 的工具测下带宽,再看下网卡是不是有什么设置或者驱动更新
    salmon5
        38
    salmon5  
       215 天前
    c1000k 也老早不稀奇了,只是有人不经意间说出来,就像他真的有 10 万并发的业务一样
    jiulang
        39
    jiulang  
       215 天前   ❤️ 1
    姑且算十万是 RPS(Requests per second),单机能达到这个么高的,要么是无 IO 请求的快速同步操作,要么是使用了异步 IO 。当然,如果 IO 操作耗时很短,同步 IO 可能也得到这么高的 RPS ,但是只要 IO 操作的时长变长,同步 IO 就立刻表现为 RPS 倍数级降低。
    所以我觉得可能是:老代码使用了同步 IO 去读取了文件、Db 或网络了,之前的环境里面,这些 IO 操作耗时不大,切换到新环境之后,这些 IO 操作的(因某些原因)耗时变大了,代码不变,还是以同步 IO 的方式调用,造成在相同的工作线程下,等待 IO 结果的时长变以,所以 RPS 跌落严重。
    jiulang
        40
    jiulang  
       215 天前   ❤️ 1
    如果你能告诉我:老代码没有使用 async await 异步,那么我们就以大概确定:你的 db 可能变慢了,而且慢的原因,可能是索引问题,或者磁盘问题。
    lambdaq
        41
    lambdaq  
       215 天前
    @jiulang 1995 年发布的 WinNT 就内核支持 IOCP 了。比 async await 更先进性能更高。。。23333
    jiulang
        42
    jiulang  
       215 天前
    @lambdaq 你可以理解 async await 为应用层的 iocp ,应用层如果还是同步 IO ,木桶的短板就短在里了,这时底层是不是 IOCP 可能都不是短板了。
    jiulang
        43
    jiulang  
       215 天前
    http.sys 你可以理解为饭店材料的供应商,他们工作高效,保证供应链供给充足。
    asp.net 的工作线程,你可以理解为厨师们,他们负责炒菜给客人;
    如果这些线程是同步 IO 工作,那么就像一个厨师为一桌客人做好菜之后,还要等客人边吃边中途继续加菜,直到客人吃饱喝足之后走人了,才能开始为下一桌客人继续做菜一样;但如果这些线程是异步 IO 工作,那就像厨师为一桌客人做好菜之后,就结束工作了,空闲的他如果有人通知他继续做菜,他就继续干活。相同的数量的厨师,异步 IO 可以让工作线程从无畏地等待中解放出来,干更多有意义的工作。
    shuimugan
        44
    shuimugan  
       215 天前   ❤️ 19
    “你电脑内存多大”
    “1T”
    “哈哈哈真是小白,哪来 1T 的内存,那是硬盘”
    “没错啊(打开机箱亮出主板上 8 条 128G ECC 内存)”

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

    异曲同工之妙( dog
    krixaar
        45
    krixaar  
       215 天前
    @hutoer #29 OP 提的是响应,所以应该是是 10W QPS/RPS 吧……
    gearfox
        46
    gearfox  
       215 天前
    @shuimugan 哈哈哈哈哈
    gam2046
        47
    gam2046  
       215 天前
    我自己的应用,每分钟大概 8 万个请求,平均下来每秒 1000 多个请求,我已经快嗝屁了。能力范围内的各种优化用尽,只能加配置了。请求里处理的 IO 全都移到内存里,才勉强在渣渣的阿里云 2 核机器上跑起来。现在长期 CPU 负载 70%以上
    zjsxwc
        48
    zjsxwc  
       215 天前
    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
        49
    mmdsun  
       215 天前
    @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
        50
    hutoer  
       215 天前
    @krixaar 你说的对。了解了 C100K ,10 万 QPS/RPS 就没那么惊讶了。OP 没说业务逻辑,服务器具体配置,所以不好评价。
    nothingistrue
        51
    nothingistrue  
       215 天前
    @yazoox #32 @ng29 #27
    以前有一个 Socket 编程,具体是那个我也忘了,可能从来都是谬传,它的编程模型是服务器用一个端口监听,然后每来一个客户端就用另一个端口跟客户端反向连接用来维持跟客户端的连接。这种模型下,服务器端的并发连接数,自然要受端口数的限制。

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


    另外,以上还没涉及负载均衡,如果涉及了,还要考虑负载均衡程序的编程模型。
    abuabu
        52
    abuabu  
       215 天前   ❤️ 8
    且不论十万并发到底行不行,问题的核心难道不是 win2008 r2 到 win 2019 响应缓慢吗?

    大家到底是阅读理解不过关还是对线多了,回避内容核心顾左右而言已经成为本能?
    hutoer
        53
    hutoer  
       215 天前
    举个例子(假的)

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

    20 * 50 * 100 = 10 万并发

    大家看,10 万并发也不是很离谱的需求
    dfkjgklfdjg
        54
    dfkjgklfdjg  
       215 天前
    @abuabu #52 ,因为冷嘲热讽是传统艺能了。
    cominghome
        55
    cominghome  
       215 天前   ❤️ 3
    @abuabu 你这也太圣人了。就好比你看到个帖子标题“换了双跑鞋,百米跑不进 10s 了,怎么回事?” 你第一反应真的是帮他研究新旧跑鞋的区别?
    lambdaq
        56
    lambdaq  
       215 天前
    @cominghome 第一反应是看看这发帖 id 是不是博尔特
    kinboy
        57
    kinboy  
       215 天前
    哈哈哈围观求助帖变成 10w 并发讨论帖
    LeegoYih
        58
    LeegoYih  
       215 天前   ❤️ 2
    怎么聊到 C10K C100K C1000K 了?
    并发数和连接数根本就是 2 个概念
    krixaar
        59
    krixaar  
       215 天前
    @abuabu #52 OP 可是稳稳单机 10W 并发而且楼下回复说没有问题,有这个级别的硬件和带宽,在 v2 发帖为啥不直接问他们的技术支持团队呢……
    而且问这种模糊的问题啥具体信息也没给( IIS 配置 /硬件配置是否有变化,并发场景是否一致,系统里其它软件版本,部分脱敏 log 之类),让人怎么去认真回答🤣
    killerv
        60
    killerv  
       215 天前
    @shuimugan 每秒 10 万次请求,应该是 QPS ;并发不是这个意思,是同时有 10 万个请求
    hutoer
        61
    hutoer  
       215 天前
    @killerv 同时有 10 万个请求是并行,不是并发
    killerv
        62
    killerv  
       215 天前
    @hutoer 并行只有在多个 CPU 的情况下才会出现,指的是不抢占 CPU 资源同时「进行」,和这个不一样
    raptor
        63
    raptor  
       215 天前
    @shuimugan 十万 RPS 和十万并发不一样,谢谢
    u823tg
        64
    u823tg  
       215 天前
    @killerv #62 不是我杠啊,你这同时是同一时刻吗,要是的话那不就是并行。 [狗头]
    killerv
        65
    killerv  
       215 天前
    @u823tg 微观上如果是同一时刻就是并行,并发只是在宏观上看是同时
    u823tg
        66
    u823tg  
       215 天前
    @killerv #65 说实话同时这个词就有歧义不应该在这用。
    sujin190
        67
    sujin190  
       215 天前
    别的不说,就算 10 万 QPS 假设你平均每个请求仅仅 1KB ,千兆网卡差不多满速了啊,更别说 10 万并发了,支持 10 万长连接和 10 万 QRS 或者并发可是很不一样的,所以真的知道 10 万并发是一个能支持多少人访问的系统么?
    Leviathann
        68
    Leviathann  
       215 天前
    @u823tg 同时不就是 concurrent 完全对应的两个词
    coolmenu
        69
    coolmenu  
       214 天前
    大家先别吵架,楼主哪去了?扔下一句话就跑,钓鱼吧。
    wxf666
        70
    wxf666  
       214 天前
    @coolmenu 楼主跑去 /t/874000 开新贴了。发那贴时,这个帖子已经吵了 40 楼了,这楼主理都不理,根本不像是求助讨论的
    zartouch
        71
    zartouch  
       214 天前   ❤️ 3
    楼上还有些理中客就搞笑 1 拿纯测试的 c100k 来说事,那种完全不带业务的纯测试单机 10w 链接能和 lz 说的是一个概念?就算是静态网页,自己算算带宽要多大,io 消耗要多少。2. 楼主来求助连自己怎么测试的具体细节都没有,不就是来钓鱼的么, 冷嘲热讽有问题?
    night98
        72
    night98  
       214 天前   ❤️ 1
    楼上吹 c100k ,c1000k 的可以投蚂蚁金服架构师岗位了,蚂蚁也就支撑了几十万笔交易 /s 的水平
    des
        73
    des  
       214 天前 via iPhone
    @night98 你这个“也就”用的好
    blankmiss
        74
    blankmiss  
       214 天前
    op 都不说话的
    abuabu
        75
    abuabu  
       214 天前
    @cominghome
    类比不当

    1.鞋子对速度的影响不大,或者鞋子影响速度的问题已经超出了普通人能够讨论的范围
    2.比率不对,10k 到 600 卡死,对比 10 秒内外之前的差距不能类比
    3.如果一个人换了一双跑鞋,之前可以跑进 10s ,现在脚疼走不动道,这时候难道不是帮他研究鞋的问题?
    4.逻辑的核心在于变量影响结果的预期是否与现实结果相等,如果远远小于,研究变量本身比其他旁枝细节重要的多
    hutoer
        76
    hutoer  
       214 天前
    @zartouch OP 没说测试的具体细节,这个算是能力问题。冷嘲热讽是素质问题。有啥好嘚瑟的!
    hefish
        77
    hefish  
       214 天前
    我的情况和 OP 很相似,我的应用原来是在 win2000 下运行的,并发数大约有 300 万的样子,前几天终于升级到了 win2019 ,并发数一下子就降到了 3 ,看着急啊。。。
    后来我就继续升级,把系统升级到了 windows 20020 ,效率一下子又提高了,比以前的 win2000 还要高出很多很多,并发一下子提高到了 1000 万,四舍五入一个亿。。。 看起来还是要坚持不懈地升级啊。
    hutoer
        78
    hutoer  
       214 天前
    @zartouch 不是所有的业务都是很复杂的,比如我前面说的 IP 地区查询。现在单机网络轻松到 40G 、IOPS 100 万,支撑 10 万并发还是可以的。
    hutoer
        79
    hutoer  
       214 天前
    @hefish 建议你升级下自己大脑 OS ,版本有点低
    pperlee
        80
    pperlee  
       214 天前
    是换了硬件吗?没有换的话,还不如用回老系统
    wxf666
        81
    wxf666  
       214 天前
    @hutoer 楼主说的是十万并发级别的大型网站,应该不算简单业务吧

    总不会每秒十万人看静态页面吧
    shyling
        82
    shyling  
       214 天前
    建立 tcp 连接和 http 服务不是一回事吧。。
    keepeye
        83
    keepeye  
       214 天前
    降回来,再测一下,确认下
    dorothyREN
        84
    dorothyREN  
       214 天前   ❤️ 1
    这不是来骗铜币的吧。。。
    zartouch
        85
    zartouch  
       211 天前
    @hutoer 呵呵没写可不是能力问题,是根本就没想着来认真讨论问题。他做了这件事,不写细节,也不回复,这在你这成能力问题了。 我想问问你把自己做的事情写下来要啥能力。 楼主发完贴智力退化成 3 岁小孩了?

    我说了就算是静态网页你自己算算要多少带宽和 IO , 还有 lz 自己写的老网站,在你这就变成 IP 查询了?还 40G 带宽一个 lz 自己维护的老网站,你自己想想办 40G 的商用带宽别逗我了好么。脑子是个好东西可惜不是每个人都有。
    hutoer
        86
    hutoer  
       211 天前
    @zartouch 把帖子从头到尾认真看一遍?不过你的脑子看不懂,算了别难为你自己了。
    aw2350
        87
    aw2350  
       211 天前
    自己抓 dump 文件,之前公司请过微软得人去分析 iis 得 dump ,没得出什么结论
    某些.net 版本的 api 方法做了升级,不好追踪具体哪里产生的损耗,尤其是那些 wcf 之类的重量级框架
    微软的东西,真是最好能不碰就不碰
    dnsaq
        88
    dnsaq  
       211 天前 via iPhone
    @nba2k9 淘宝网 RPS 听说也就几十万,我说就两台服务器了?你的意思两台服务器就能支持这个数量级?
    nba2k9
        89
    nba2k9  
       210 天前
    楼主一台扛 10w 的服务器,淘宝 20w 岂不是需要两台就行了?

    “传下去”是一个梗而已,请不要当真
    nba2k9
        90
    nba2k9  
       210 天前
    dnsaq
        91
    dnsaq  
       210 天前
    @nba2k9 你这样说也没错了。看场景吧,我其实想表达的意思是现在的业务请求都很复杂实现真正意义上的并发挺难的。
    nba2k9
        92
    nba2k9  
       209 天前
    @dnsaq 我只是单纯从楼主的单机 10w 并发加上你说的淘宝 20w 并发开了一个“传下去”形式的玩笑
    zartouch
        93
    zartouch  
       208 天前
    @hutoer 脑子有病就赶紧去医院,你看啊可能有人赞同你么。拉黑了,我也是最近闲的和脑子有病的讲啥。
    hutoer
        94
    hutoer  
       207 天前
    @zartouch 记得吃药呀
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2791 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 12:56 · PVG 20:56 · LAX 05:56 · JFK 08:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.