网站在这么久之后死了?

时间:2011-09-26 16:51:15

标签: c# asp.net performance linq iis

我有一个网站在做一些我以前从未见过的事情。我的服务器是Win 2003 w / IIS6我正在使用C#和.Net 4.0。

该网站是一个房地产网站,可直接将数据存储在我的数据库中。该网站将运行一段时间,然后就死了。我的意思是你会尝试查看一个属性的详细信息,如果它加载,它将占用该站点2-3分钟。如果我只是重新保存web.config文件并重新上传它以重新启动应用程序,它会运行一段时间,然后会再次死亡。这种情况一遍又一遍。我已经去了当地的副本,而现场网站“已经死了”,本地副本将运行得很好,然后它会在很长时间后死亡。它所用的时间范围从5分钟到30分钟不等,我相信它与请求数量有关。

任何人都有任何关于可能发生的事情的线索?页面上唯一的数据查询是拉取下面的LINQ查询主数据:

public Listing GetListingByMLNumber(string MLNumber)
{
    try
    {
        DatabaseDataContext db = new DatabaseDataContext();
        var item = (from a in db.Listings
                    where a.ML_.ToLower() == MLNumber.ToLower()
                    select a).FirstOrDefault();

        return item;
    }
    catch (Exception ex)
    {
        Message = ex.Message;
        return null;
    }
}

3 个答案:

答案 0 :(得分:2)

不关闭数据库上下文是您提供的代码中的明显错误。将其包裹在using语句中以确保它被正确处理。

只要上下文存在,您将继续使用sql连接,这是一种有限的资源。您还将通过更改跟踪返回的实体来浪费内存。鉴于您的代码,上下文应该在某些时候被垃圾收集,但它可能仍然是问题(而且,无论这是否是问题,您应该处置数据库上下文)。

尝试在本地进行负载测试,看看是否可以重现问题。如果可以,请使用调试器找出问题所在。如果没有,您可能需要添加日志记录以缩小问题范围。

您还可以查看IIS进程以查看它是否使用了大量的内存,句柄等。还要检查IIS设置的性能和应用程序池重新打印,如此处的另一个答案所示。

答案 1 :(得分:0)

我会看一下应用程序池设置,看看如何回收工作进程,我还会查看IIS中的Performance选项卡,看看是否指定了带宽阈值。

答案 2 :(得分:0)

如果您再次遇到此类问题,则应将DebugDiag / ADPlus和WinDBG添加到诊断工具带。

当您的应用程序再次挂起或者需要花费相当长的时间来响应请求时,请使用DebugDiag或ADPlus获取工作进程的转储。将其加载到WinDBG中,加载SOS(Strike之子),这是一个用于托管代码调试的WinDBG扩展,并开始挖掘。

Tess Ferrandez提供了一系列有关如何有效使用这些工具的教程和实验:

  

.NET Debugging Demos - Information and setup instructions

他们几次让我吃了几个泡菜,非常值得花时间熟悉它们。