2011-09-26 30 views
1

我有一个网站在做一些我从未见过的事情。我的服务器是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

属于对你考虑使用后处置DataContext的serverfault –

+5

(即使用'using'声明)? – Zruty

+0

调试的最佳方法是启用日志记录。您可能会遇到资源限制(资源占用太多,连接需要等待等等)。) –

回答

2

不关闭数据库情况下脱颖而出,成为你所提供的代码明显的错误。将它包装在using声明中,以确保它正确处理。

只要上下文存在,您就会坚持一个sql连接,这是一个有限的资源。您还将通过更改跟踪您返回的实体来浪费内存。鉴于你的代码,上下文应该在某个时候被垃圾回收,但它可能仍然是问题(并且,不管这是否是问题,你应该处理数据库上下文)。

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

你也可以看看IIS进程,以查看它是否使用荒谬数量的内存,把手等。此外,检查性能和应用程序池循环的竞争IIS设置在另一个答案建议在这里。

+0

嗨,伙计们, 感谢您的回复。我确实发现了这个问题,它与LINQ根本没有任何关系。我在页面上使用另一种方法来下载来自中心源的照片。在链接照片之前,我做了一个HttpWebRequest以确保照片存在。正是这个要求保持超时。我做了一些修改,现在它工作正常。 DrIIS - 我肯定会执行处置。我没有意识到你需要这样做。谢谢您的帮助! 祝你好运! – Ricketts

+0

“只要上下文存在,就会保留一个sql连接,这是一个有限的资源。” - 事实并非如此,L2S和L2E上下文一旦完成查询就释放连接回连接池,并在需要时立即获得新连接,因此处置这些连接不会释放任何内容。尽管如此,这仍然是一个好习惯 – Mant101

0

我想看看在应用程序池设置看到工作进程是如何被回收,我也期待在IIS中的性能选项卡下,看是否有指定的带宽阈值。

0

如果你再打这种类型的问题,那么您应该添加DebugDiag资料/ ADPlus的和WinDBG中你的诊断工具区。

当应用程序再次挂起或正在一个非常长的时间来响应请求再抢使用DebugDiag资料或ADPlus的工作进程的转储。将其加载到WinDBG中,加载SOS(Son of Strike),这是一个WinDBG扩展,用于托管代码调试并开始挖掘。

苔丝Ferrandez对如何有效使用这些工具很有一套教程和实验室:

.NET Debugging Demos - Information and setup instructions

他们已经得到了我出了几个泡菜几次,这是很好值得花时间熟悉它们。