[英]Memory Allocation / 100% Heap gen2 Fragmentation on Server
我有一個.net Windows服務應用程序,啟動時會在服務器上分配所有現有內存。 經過內存分析后,我可以看到,第2代堆中分配的內存減少了90%。 碎片率為100%
在我的工作站上通過.exe運行應用程序不會產生相同的結果。 內存分配在這里正常。
我嘗試每5秒強制一次GC,以查看GC是否存在問題。 同樣的問題
我的問題1.在這種情況下什么會導致內存碎片? 2.是否可以通過某種方式配置Windows服務,使其表現得像我的桌面? 3.我將如何去找出導致問題的原因?
非常感謝
服務和桌面應用程序之間最重要的區別是運行該應用程序的用戶。 從“服務”控制面板上的“登錄”選項卡中進行檢查。 默認值為“本地系統帳戶”,其權限可能少於桌面用戶的權限。 將其更改為當前用戶,然后再次檢查您的應用程序。
將要死亡的所有具有終結器的對象都放入一個稱為“終結器隊列”的隊列中。 GC一對一地運行終結器,如果終結器陷入無限循環,則整個GC都將被阻塞。 最明顯的效果是,內存使用量永無休止地增加。 您可以通過添加這樣的代碼輕松模擬它。
~MyClass
{
while (true)
{
}
}
首先,檢查所有終結器。 從本地系統帳戶執行可能會在某種程度上導致無限循環。
也許您沒有任何終結器,那么您應該對此進行一些啟發。 還有一個名為dotMemory的實用程序(不是免費的,但有一定的試用期),該實用程序遍歷所有堆中未釋放的對象。 它可以提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.