有一个WCF自托管服务,必须99%的时间正常工作。有时我们会遇到一些内存问题,如下图所示:
但是服务在出现这些问题后仍然像往常一样工作。我们该如何管理这个问题?非常欢迎任何关于创建健壮的服务、能够在不同异常情况下幸存的提示和建议。
有一个WCF自托管服务,必须99%的时间正常工作。有时我们会遇到一些内存问题,如下图所示:
但是服务在出现这些问题后仍然像往常一样工作。我们该如何管理这个问题?非常欢迎任何关于创建健壮的服务、能够在不同异常情况下幸存的提示和建议。
你确定你的所有依赖项都没有未经管理的代码吗?我曾经遇到过非常类似的情况,那是因为我们正在释放另一个进程稍后也会尝试释放的内存。
你的服务行为特别是 ConcurrencyMode 和 InstanceContextMode 是什么?
如果你将 ConcurrencyMode 设置为 Multiple,而 InstanceContext 设置为 PerCall 或者 PerSession(默认),那么如果你有大型数据结构或未释放的资源,你肯定会遇到问题。
如果你正在使用多个 Concurrency,请尝试使用 InstanceContextMode Single [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]