2010-10-06 52 views
1

一些背景信息:如何追踪asp.net应用程序中的明显内存泄漏?

  • 我们有一个64位计算机上运行时IIS6
  • 这些网站都具有相同的核心代码的几个网站,但不同的外观和内容
  • 我们有一个SQL 2005在整个网站中使用相当多的数据库
  • 从历史上看,我们使用过SQL存储过程,但已经逐渐过渡到NHibernate。我们的大部分代码现在都使用NHibernate,但不是全部。
  • 虽然我们每天在SQL连接/死锁方面遇到一些错误,但这些网站在我们的实时Web服务器上运行良好。

上周四我们注意到网站运行速度很慢,然后检查任务管理器发现其中一个网站占用了1.6Gb的内存。自那时起,我们一直在重新启动应用程序,并在一天中观看它的大小缓慢增加。

我们显然有一个内存泄漏(或至少,这是效果),但我失去了头发试图找出如何追踪它。

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

Debug Diagnostics尚未发现任何问题。

刷新某些页面会非常快速地导致内存快速跳跃,然后稍微下降,但是所有时间逐渐向上。

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

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

任何想法?

编辑

好了,所以不完全相信我已经找到了问题,但我们越来越近。这确实与SQL有关。错误日志显示自上个星期四以来的很多错误。

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

我们得到的警告是:

  • SQL服务器遇到时间超过15秒完成对文件的I/O请求的XX occurence(S).. tempdb.mdf

XX在17到90之间!这听起来像是一个僵局?

跟以下erors:

  • 无法完成因登录过程中开启的服务器连接

这些重合与我们的记录时间,当网站已推迟“blipping”。

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

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

编辑

好重新启动后,我把活动监视器。你会说多少个睡眠过程是正常的?我们有大约127个睡觉。这是超过10个网站的服务。

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

+1

检查你的sql服务器活动监视器,也许你的应用程序没有泄漏内存,但SQL服务器连接。如果是这种情况,你应该看到很多睡眠过程。 – 2010-10-06 15:01:51

+0

您使用DebugDiag有多远? – Kev 2010-10-06 15:37:51

+0

嗨Kev - 不是很远。它根本没有报告任何问题。毕竟,我认为这不是一个IIS问题,但正如marc.d所建议的,由于SQL问题,sql-server连接被阻止。 – 2010-10-06 15:39:12

回答

0

好吧,最终看起来相当复杂。 Sql死锁和数据问题,似乎通过反病毒软件加剧了文件锁定或窒碍。

关闭防病毒减少了问题,但我们仍然需要解决潜在的数据问题。