2013-02-20 58 views
0

我在尋找處理內存溢出的方式或解決方案。當內存溢出或其增長超過某個值時,可能會重新啓動服務。在死之前做一些工作。服務內存溢出處理或保護

我知道這是不正常的情況和所有的錯誤利茲內存溢出需要糾正,但我需要確保,一些問題後,服務將恢復。

UPD 我有windows服務。該服務器接受來自客戶端的許多連接客戶做出一些有助於記憶消耗的動作。沒有泄漏,它只是吃內存來處理客戶端reqierments。在某些時刻(峯值負載)RAM不夠。這不是什麼大問題。問題是在第一次內存溢出異常服務無法處理任何東西之後。我有充滿內存溢出異常的日誌。它不會自我重啓,它不處理客戶端請求,它不會退出此狀態。

我只想找到一種方法退出服務的這種狀態,如果它不能重新啓動它。如果有可能預測這種狀態。

第一種方式是限制客戶端,但它並不保證一些客戶端吃了太多內存。

檢測危險內存消耗並停止處理新客戶端或正確重新啓動有可能嗎? 如果記憶結束,它可以自動啓動服務嗎?

+2

的服務你的意思是Windows服務或Web服務?你能否在你的問題中提供更多細節? – 2013-02-20 16:11:53

+0

謝謝。我更新問題。但問題會影響任何類型的流程。 – gabba 2013-02-20 16:25:05

+2

修復你的代碼,不要在上面貼上創可貼。如果你不知道什麼東西在吃這些內存,那麼使用內存分析器。順便說一下,自動服務重啓已經內置到Windows中。服務屬性中的「恢復」選項卡。 – 2013-02-20 18:14:37

回答

1

內存溢出真的很難追蹤/處理。很可能你有某種內存泄漏。在.NET中創建內存泄漏仍然是可能的。 您不能在編程級別自行處理內存溢出問題,因爲您正在託管環境中工作,因爲您的垃圾收集工作可以消除不再使用的資源。最好的辦法是防止內存泄漏。 如果您希望在內存消耗增加的情況下重新啓動服務,則需要使用某種類型的管理軟件包,例如Microsoft SCOM,它是Windows非常全面的工具。

檢查這些線程也 Memory Leak in C#

http://crazorsharp.blogspot.com/2009/03/net-memory-leaks-it-is-possible.html

我希望幫助

+0

謝謝,我會閱讀關於SCOM。我更新了這個問題,使其更加敏感。 – gabba 2013-02-20 21:40:46