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