我有一個WCF(C#)項目發佈,並面臨「OutOfMemoryException」問題。這些DLL使用Any CPU
構建。 AppPool內存設置被設置爲0(表示沒有限制)。 我每分鐘有大約1500個請求,並且每分鐘有大約100個其他請求。該項目使用EntityFramework。有應用程序緩存(這是一個字典)OutOfMemoryException - WCF服務
我做了一些故障排除,試圖找出問題,但目前尚不清楚。我嘗試計算使用的總內存(通過調用GC.GetTotalMemory(false)
)和緩存列表的大小。在獲得OOM例外時,高速緩存大小約爲7 MB(每個30 KB的2500個對象),並且使用的總內存在600 MB到1.5 GB之間變化。
因此很明顯內存不足並且資源被GarbageCollector
定期清除(內存大小不會一直增加)。因此,OOM異常並不是因爲內存已滿。
主要是在將對象序列化爲JSON(我正在使用Newtonsoft)或對字符串應用某些操作(連接,替換,Regexreplace,...)時,在日誌中看到OOM異常,下面是異常的一些示例:
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Text.StringBuilder.ExpandByABlock(Int32 minBlockCharCount)
at System.Text.StringBuilder.Append(Char* value, Int32 valueCount)
at System.Text.StringBuilder.Append(String value, Int32 startIndex, Int32 count)
at System.Text.RegularExpressions.RegexReplacement.Replace(Regex regex, String input, Int32 count, Int32 startat)
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement, Int32 count, Int32 startat)
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement)
at System.Text.RegularExpressions.Regex.Replace(String input, String pattern, String replacement)
和
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.String.ReplaceInternal(String oldValue, String newValue)
at System.String.Replace(String oldValue, String newValue)
什麼可以做,以重現該問題的任何意見或建議?
驗證過程的位數。你會發現它是32位的。 – usr
我該如何獲得比特?該DLL使用「任何CPU」設置構建,並且服務器運行Windows Server 2012 x64。所以DLL的正常行爲是64! – Mostafa
DLL承擔主機進程的位數。使用Process Explorer找出或Response.Write(IntPtr.Size)。 – usr