我們的MVC3 Web應用程序和我們的WCF數據層服務之間存在內存泄漏問題。WCF/Castle發生內存泄露
我相信問題來自WCF方面,雖然不能追蹤它。我搜索了網絡和這些論壇,但一直未能找到原因。任何幫助將非常感激!
所以 - 最初的症狀是w3wp進程與後端不斷增長有關的大小。每次通過調用服務的Web應用程序進行簡單調用時,我們都可以看到它增長了一個可變量(數量級爲100kb)。對應用
運行Jetbrains的內存配置文件,我們可以看到,
System.ServiceModel.Channels.TransmissionStrategy.SlidingWindow
是遙遙領先的罪魁禍首。在應用程序啓動時,有4個對象用少量內存實例化(佔總數的6.4%),在輕度使用後,它升至> 200個對象,約佔總數的50%。繼續使用將其推向100%。我從來沒有聽說過這個,但是一些使用Google表明它在WCF層數據傳輸中使用(除其他外)。
我目前的思路是正在創建進程,但從未正確釋放。從城堡創建我們的服務,並從網絡端註冊爲:
public static IWindsorContainer RegisterWcfService<TS, TI>(this IWindsorContainer container)
where TI : TS
where TS : class
{
container.Register(Component.For<TS>().ImplementedBy<TI>().Named(typeof(TI).Name)
.Interceptors<LoggingInterceptor>()
.Interceptors<ExceptionHandlerInterceptor>()
.LifeStyle.Transient
.AsWcfService(
GetServiceModel<TS, TI>()
));
return container;
}
正如其他線程建議,我們正在使用
container.Kernel.ReleasePolicy = new NoTrackingReleasePolicy();
,以確保部件應正確釋放。我們沒有明確處理我們的任何服務引用,儘管我相信上面的內容應該足夠了。有沒有人有任何建議或建議我們的泄漏可能來自哪裏?
你確定內存不能被回收?整個機器內存是否承受壓力?難道是因爲有足夠的記憶,它只是不回收它? – 2012-04-23 09:12:39
完全確定,它沒有被回收 – Chris 2012-04-23 13:47:29