我有一个网站在做一些我以前从未见过的事情。我的服务器是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;
}
}
答案 0 :(得分:2)
不关闭数据库上下文是您提供的代码中的明显错误。将其包裹在using
语句中以确保它被正确处理。
只要上下文存在,您将继续使用sql连接,这是一种有限的资源。您还将通过更改跟踪返回的实体来浪费内存。鉴于您的代码,上下文应该在某些时候被垃圾收集,但它可能仍然是问题(而且,无论这是否是问题,您应该处置数据库上下文)。
尝试在本地进行负载测试,看看是否可以重现问题。如果可以,请使用调试器找出问题所在。如果没有,您可能需要添加日志记录以缩小问题范围。
您还可以查看IIS进程以查看它是否使用了大量的内存,句柄等。还要检查IIS设置的性能和应用程序池重新打印,如此处的另一个答案所示。
答案 1 :(得分:0)
我会看一下应用程序池设置,看看如何回收工作进程,我还会查看IIS中的Performance选项卡,看看是否指定了带宽阈值。
答案 2 :(得分:0)
如果您再次遇到此类问题,则应将DebugDiag / ADPlus和WinDBG添加到诊断工具带。
当您的应用程序再次挂起或者需要花费相当长的时间来响应请求时,请使用DebugDiag或ADPlus获取工作进程的转储。将其加载到WinDBG中,加载SOS(Strike之子),这是一个用于托管代码调试的WinDBG扩展,并开始挖掘。
Tess Ferrandez提供了一系列有关如何有效使用这些工具的教程和实验:
他们几次让我吃了几个泡菜,非常值得花时间熟悉它们。