如何在asp.net应用程序中跟踪明显的内存泄漏?

时间:2010-10-06 14:52:30

标签: asp.net nhibernate iis memory-leaks

一些背景信息:

  • 我们在使用IIS6的64位计算机上运行了多个网站
  • 这些网站都具有相同的核心代码,但皮肤和内容不同
  • 我们有一个SQL 2005数据库,在整个网站中使用得相当多
  • 从历史上看,我们已经使用过SQL存储过程,但已逐渐过渡到NHibernate。我们的大多数代码现在使用NHibernate,但不是全部。
  • 这些网站已经在我们的实时网络服务器上运行了一段时间,虽然我们每天都会收到一些关于SQL连接/死锁的错误。

上周四我们注意到这些网站进展缓慢,然后检查任务管理器发现其中一个网站占用了超过1.6Gb的内存。从那时起,我们一直在重新启动应用程序并观察它在一天中的大小逐渐增加。

我们显然有内存泄漏(或者至少,这是影响),但我正在试图找出如何追踪它的头发。

它似乎只发生在这个网站上,尽管据我所知,代码在它开始发生之前没有任何变化。然而,它是我们最繁忙的网站,因此它可能是一个交通问题。

调试诊断程序未发现任何问题。

快速刷新某些页面会导致内存迅速跳起,然后稍微下降,但是逐渐进展会一直向上。

我无法在我们的测试服务器上或本地复制该问题。可能是因为流量与它有关。

我怀疑问题在于数据库连接/锁定。但是,我不确定这会导致指定的问题。

有什么想法吗?

修改

好吧所以不确定我是否已经找到了问题,但我们越来越近了。这绝对是SQL相关的。错误日志显示自上周四以来发生的大量错误。

这一切都发生在我们在服务器上运行一些Windows更新之后。其中一个更新在SQL服务器上失败,因此不确定这是否会导致一些问题。

我们收到的警告是:

  • SQL Server遇到XX次出现的I / O请求,在文件上完成时间超过15秒.. tempdb.mdf

XX在17到90之间!这听起来像是一个陷入僵局的问题吗?

接下来是以下错误:

  • 由于延迟打开服务器连接而无法完成登录过程

这些与网站“昙花一现”的日志时间一致。

我们已将SQL Server上的页面文件大小增加到建议的大小,因为它设置为最大4Gb,但建议为12Gb。我想我们可能需要回滚周四发布的Windows更新,如果这不能解决的话。

不幸的是我无法进入活动监视器,因为它告诉我Timeout已过期!

修改

好的重启后我进入了Activity监视器。你会说几个睡眠过程是正常的?我们大概有127个睡觉。这是服务超过10个网站。

如果出现死锁或超时问题,NHibernate会不能正确清理其连接?

1 个答案:

答案 0 :(得分:0)

好吧所以最后它看起来很复杂。 Sql死锁和数据问题,似乎被反病毒软件锁定或窒息在文件上。

关闭反病毒减少了问题,但我们仍然需要解决基础数据问题。