.NET Core是一個開源通用的開發框架,具有跨平臺能力,我們在享受其性能飆升的同時,也面臨了一些問題。通過觀察 NetCore 程式的線上運行情況發現 ,負載高的情況下應用程式占用記憶體較大,本文將針對這個問題展開討論,對比分析不同GC工作模式下的.NetCore性能與記憶體管理的表現。通過查找資料 ...
.NET Core是一個開源通用的開發框架,具有跨平臺能力,我們在享受其性能飆升的同時,也面臨了一些問題。通過觀察 NetCore 程式的線上運行情況發現 ,負載高的情況下應用程式占用記憶體較大,本文將針對這個問題展開討論,對比分析不同GC工作模式下的.NetCore性能與記憶體管理的表現。通過查找資料,得知.Net Core的GC工作模式大致可以分為四種工作模式。接下來直接針對這四種模式進行測試,下文列出了每種模式的配置方式 、程式記憶體占用情況與壓測聚合報告:
伺服器:CPU : E5-2609 v3 @ 1.9G
記憶體 : 8G。
測試工具:jmeter 100個線程 10萬次請求。
工作模式配置可以在項目文件中進行修改
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
也可以直接修改發佈包中的runtimeconfig文件。
一 、Concurrent & Workstation GC (工作站模式,啟用併發垃圾回收)
二、Background & Workstation GC (工作站模式 ,禁用併發垃圾回收)
三 、Concurrent & Server GC (伺服器模式,啟用併發垃圾回收)
四 、Background & Server GC (伺服器模式,禁用併發垃圾回收)
五 、結論
通過對比四個測試結果可以看出,工作站模式記憶體控制要明顯優於伺服器模式,gc工作頻繁,但是隨之帶來的後果是性能的下降,可以看出伺服器模式的相應時間和吞吐量要優於工作站模式,其中伺服器模式是預設的工作模式。以上測試結果僅供參考,通過反覆的測試,結果大致不變。