gpt4 book ai didi

asp.net 大量请求排队和上下文切换

转载 作者:行者123 更新时间:2023-12-02 03:52:10 24 4
gpt4 key购买 nike

我们有一个相当受欢迎的网站,每月有大约 400 万用户。它托管在具有 16 GB 内存、2 个进程和 24 个内核的专用盒子上。

在任何给定时间,CPU 始终低于 40%,内存低于 12 GB,但在最高流量时,我们看到性能非常差。该网站非常非常缓慢。我们有 2 个应用程序池,一个用于我们的主站点,另一个用于我们的论坛。只有网站是缓慢的。我们对每个应用程序池的 CPU 或内存没有任何限制。

我看过他的性能计数器,我看到了一些非常有趣的东西。由于某种原因,在我们的窥视时间,请求正在排队。整体上下文切换次数非常高,大约为 30 - 110 000 k。

据我所知,高上下文切换是由锁引起的。谁能给我一个会导致大量上下文切换的示例代码。

最佳答案

我不太关心上下文切换,而且我认为数字并不大。你有很多线程在 IIS 中运行(因为它是一个 24 核机器),并且期望更高的上下文切换数量。但是,我绝对关心请求排队。

我会做几件事,看看它如何影响你的性能计数器:

  • 您的服务器 CPU 显然未得到充分利用,因为您一直运行在 40% 以下。您可以尝试在 IIS 中设置更高的“每处理器线程数限制”值,直到达到 50-60% 的利用率。书籍中每核线程的最佳值是 20,但这取决于场景,您可以尝试更高或更低的值。我建议尝试设置一个 >=30 的值。 CPU 利用率低也可能是阻塞 IO 操作的标志。
  • 调整 IIS 属性中的“队列长度”设置。如果您将“每个处理器的线程数限制”配置为 20,那么您应该将队列长度配置为 20 x 24 个核心 = 480。同样,如果请求正在排队,这可能表明您的所有线程都在阻止服务其他请求或阻止等待 IO 响应。
  • 不要从 IIS 提供静态文件。将它们移动到 CDN、亚马逊 S3 或其他任何地方。这将显着提高您的服务器性能,因为 1,000 次服务器请求将转到其他地方!如果您必须从 IIS 提供文件,则配置 IIS 文件压缩。此外,为您的静态内容使用过期 header ,因此它们会缓存在客户端上,这将节省大量带宽。
  • 尽可能在 ASP.NET Controller 、处理程序等中使用异步 IO(从磁盘、数据库、网络等读取/写入),以确保以最佳方式使用线程。使用阻塞 IO 阻塞可用线程(我在我生活中见过的 95% 的 ASP.NET 应用程序中都这样做)很容易导致线程池在重负载下被充分利用,并且会发生排队。
  • 做一个整体优化,以防止访问您的服务器的请求数量,以及单个请求的处理时间。这可能包括您的 CSS/JS 文件的缩小和捆绑,重构您的 Javascript 以减少到服务器的往返次数,重构您的 Controller /处理程序方法以使其更快等。我在下面添加了谷歌和雅虎推荐的链接。
  • 在 IIS 中禁用 ASP.NET 调试。

  • 谷歌和雅虎推荐:

    https://developers.google.com/speed/docs/insights/rules

    https://developer.yahoo.com/performance/rules.html

    如果你遵循所有这些建议,我相信你会得到一些改进!

    关于asp.net 大量请求排队和上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973278/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com