1

我有一个 WCF 服务,目前在 IIS7 中使用 .NET 4.0 在经典模式下托管。该服务通常在 250 到 400mb 之间嗡嗡作响,这是合理的,因为它连接到的数据库的大小只有大约 300mb。除了内存使用,CPU 使用率保持在 0% 到 15% 之间。然后随机地 CPU 和内存使用量将大幅飙升。RAM 使用率将上升到物理内存限制(在此 EC2 实例上为 1.7GB),CPU 将在 100% 达到峰值,然后恢复到 25% 到 50% 之间。几分钟后,内存使用率和 CPU 使用率将恢复正常。

有谁知道可能是什么原因造成的?如果没有,有没有很好的方法来追踪问题?我已经使用 PerfMon 来查看使用情况,但我找不到一个好方法来跟踪 WCF 服务中实际使用的所有内存的位置。任何建议表示赞赏。

4

2 回答 2

3

在我看来,您没有正确关闭连接。当您使用 WCF 时,请始终注意连接实现 IDisposable - 如果您不使用它,连接将持续存在并且数据将被存储。正确使用“使用”,您可能会解决问题。

其次,这可能只是意味着您正在使用 PerSession 模式。如果您正在使用会话,它们当然会被存储 :-) 此外,WCF 中有一些已知的错误可能会导致这种情况。最值得注意的是“单例”模式;将其更改为“PerCall”,它可能会完全解决您的问题。

我见过几个导致内存泄漏的情况。

至于分析,我是 Red-gate / ANTS 的忠实粉丝,但周围也有其他分析器。

于 2013-03-29T10:45:46.050 回答
0

按照你们的建议下载了一个分析器。事实证明这不是我在做的事情,但是 AE.Mail 库(我正在使用)中的搜索功能的工作方式存在一个错误,这导致每 5 分钟内存大量膨胀。我使用的是 Red-gate's,非常棒,感谢所有提供建议的人。

于 2013-04-02T04:57:56.953 回答