【问题标题】:asp.net website stops responding when doing heavy query进行大量查询时,asp.net 网站停止响应
【发布时间】:2011-11-26 00:42:14
【问题描述】:

我有一个即将发布的 asp.net 网站。该网站处理业务管理。我正在为发布做准备的一件事是将大量数据从购买的企业列表上传到我们的 SQL 数据库中。为此,我使用了一种非常简单的方法:我将 .csv 文件放在服务器上的一个文件夹中,并在临时页面上使用 Page_Load 事件来执行处理数据所需的逻辑并将其放入我们的数据库中.

这是一个漫长的过程。业务列表被分解成一大堆文件,我在页面上设置了脚本,以便在每次刷新页面时从一个文件中导入所有数据。每个文件大约需要 10 分钟。

奇怪的是:当处理这些数据时(当服务器正在处理所有内容时,在 page_load 方法终止之前)网站被阻止 - 没有其他用户可以访问它,并且不会加载网站上的其他页面。他们被困在“正在连接...”阶段。

目前这不是一个大问题,因为该站点只是在测试环境中运行。但是,当网站上线时,我可能需要使用类似的脚本将数据放入数据库,显然,在这种情况发生时访问所有被阻止的用户是不可接受的。

我相当确定这不是 SQL Server 的问题,因为我能够在此进程运行时同时进行查询,所以 Web 服务器一定有问题。

我无法发布代码摘录,因为它冗长且技术性强。但是,没有什么困难:该方法从 .csv 文件中读取数据,对其进行处理,并对文件的每一行向外部服务发出 HTTP 请求,以收集更多相关数据。然后,将所有数据插入到 SQL 数据库中。

据我了解,网络服务器不应该像这样阻塞。即使一个线程/用户需要大量资源,它们也应该能够同时为大量用户提供页面。

任何人都可以建议可能会发生什么?我应该从哪里开始寻找解决方案?

【问题讨论】:

  • 如果您的数据处理与您的网站无关,您可以使用另一个应用程序池创建另一个网站。
  • 您接受的答案只是修复的一部分。是的,它将解决当前问题,但您需要调整您的 asp.net 安装的性能。您需要根据服务器中的 CPU 数量配置 maxconnections 和其他线程级别设置。我认为您应该首先更改您的 machine.config 否则您将在生产中遇到性能问题。
  • @Nabheet Sandhu 感谢您的 cmets。我查看了machine.config文件,里面有<processModel autoConfig="true"/>的设置。互联网上的其他一些人建议使用autoconfig=true,已经设置了好的设置。对吗?
  • 我实际上并不了解自动配置,因为自 .net 1.1 天以来我一直在手动设置这些值。在某些特殊情况下,此自动配置可能需要进行一些调整。但这些价值观对你和我都有效!!!!谢谢你。它有助于与其他人交谈,这样人们就可以跳出框框思考。

标签: c# asp.net sql-server-2005 iis-6 windows-server-2003


【解决方案1】:

让请求由异步处理程序处理。

http://msdn.microsoft.com/en-us/library/ms227433%28v=vs.85%29.aspx

这将允许您的网站在漫长的流程运行期间继续开展业务。

【讨论】:

    【解决方案2】:

    ASP.NET 不适用于繁重的处理。 ASP.NET 页面应该只触发该操作。后台进程应该完成繁重的工作。两者都可以使用队列或类似的东西进行通信。 网页应该简单地报告后台任务的状态。

    这种范式是现代计算(尤其是云计算)的核心。

    【讨论】:

      【解决方案3】:

      请参考来自 msdn 的http://msdn.microsoft.com/en-us/library/ff647787.aspx#scalenetchapt06_topic8

      我认为问题在于您使用的是 asp.net 的默认设置,您没有获得足够的线程并且只有 2 个出站 tcp/ip 连接。这对于一个真正的网站来说太可怕了。

      请在您的 machine.config 中更改 maxconnections、maxworkerthreads 等。其中一些设置有一个公式,例如 12 * CPU 数量等。

      这应该会为您提供所需的性能提升。

      希望这会有所帮助。

      编辑:-

      我的 cmets 是在我了解 machine.config 中的 autoconfig=true 设置之前。我做了一些初步研究,发现这些设置适用于大多数应用程序。因此,仅在可能需要仔细考虑优化的特殊场景中才需要这些自定义设置。

      【讨论】:

        猜你喜欢
        • 2018-09-05
        • 1970-01-01
        • 2016-05-10
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        • 2017-09-30
        相关资源
        最近更新 更多