我有一个WCF服务,当前使用.NET 4.0在经典模式下托管在IIS7中。该服务通常在250到400mb之间嗡嗡声,这是合理的,因为它所连接的数据库的大小只有大约300mb。随着内存使用量的增加,CPU使用率保持在0%到15%之间。然后随机CPU和内存使用量将大幅增加。 RAM使用率将达到灵敏内存限制(在此EC2实例上为1.7GB),CPU将在100%达到峰值,然后返回到25%和50%之间。几分钟后,内存使用率和CPU使用率将降至正常水平。
有谁知道可能导致这种情况的原因是什么?如果不是有一个很好的方法来追踪问题?我已经使用PerfMon查看用法,但我找不到一个好方法来跟踪WCF服务中实际使用的所有内存的位置。任何建议都表示赞赏。
答案 0 :(得分:3)
听起来像你并没有正确关闭连接。当您使用WCF时,请始终注意连接实现IDisposable - 如果您不使用它,连接将会延迟并且数据将被存储。使用'使用'正确而且你可能会解决这个问题。
其次,这可能仅仅意味着您正在使用PerSession模式。如果你正在使用会话,它们当然会被存储:-)另外,WCF中有一些已知的错误可能导致这种情况。最值得注意的是“单身人士”。模式;将其改为“PerCall'它可能完全解决你的问题。
我已经看到了一些导致内存泄漏的案例。
至于剖析,我是Red-gate / ANTS的忠实粉丝,但也有其他的剖析器。
答案 1 :(得分:0)
按照你们的建议下载了一个分析器。事实证明这不是我正在做的事情,但是AE.Mail库中的搜索功能(我正在使用)的工作方式存在一个错误,它每5分钟就会导致内存大量膨胀。我使用的那个是Red-gate's,非常棒,感谢每个提出建议的人。