.Net Core內存回收模式及性能測試對比分析
.NET Core 兩種GC模式:
Server GC / Workstation GC
Server GC :
主要應用于多處理器系統(tǒng),并且作為ASP.NET Core宿主的默認配置。它會為每個處理器都創(chuàng)建一個GC Heap,并且會并行執(zhí)行回收操作。該模式的GC可以最大化吞吐量和較好的收縮性。這種模式的特點是初始分配的內存較大,并且盡可能不回收內存,進行回收用時會很耗時,并進行內存碎片整理工作。用一句簡單的話說,這個就是貪婪模式,通過盡可能多的獲得內存和少回收來得到更好的性能。結果就是高內存使用率性能較好。
Workstation GC :
主要應用于單處理器系統(tǒng),Workstation GC盡可能地通過減少垃圾回收過程中程序的暫停次數(shù)來提高性能。低負載且不常在后臺(如服務)執(zhí)行任務的應用程序,可以在禁用并發(fā)垃圾回收的情況下使用工作站垃圾回收。特點是會頻繁回收,來阻止一次較長時間的回收。結果就是低內存使用率性能較差。
簡單測試
以下測試結果都在同一臺計算機上,配置如下:
•Windows 7 Ultimate
•Intel Core I3-3220 @ 3.30 GHZ
•8G內存,可用空間3GB
•SQL Server 2014
被測試的程序是ZKEACMS,首頁,單面壓力測試,5000個請求,1000個并發(fā)。測試結果如下:
Server GC :
響應結果如下,大概167.81 Req/s,這個結果并不是每次都一樣,會有所偏差,僅供參考:

內存使用漲到差不多600多M左右,期間會有上下上下浮動,情況如下圖所示:

經(jīng)過反復多次的測試,內存最高時漲到800多M,這與可用內存有關系,如果可用內存更多,還會漲到1G或更高然后再掉下來:

Workstation GC :
響應結果如下圖所示,大概151.33 Req/s,看起來是要比Server GC差一點點,并且多次測試結果,總體都是更差些。

內存使用情況一直在200M左右浮動,反復的壓力測試,也不會有大的大起大落,這與它積極的回收有關系:

內存回收模式的切換
現(xiàn)在對.Net Core的不同的內存回收模式產生的影響已經(jīng)有了一定的了解,那就可以看你的個人情況做出選擇了。.Net Core默認的貪婪模式可以得到更好的性能,這沒有什么問題是,畢竟內存不用放在那也是浪費。當然如果你的服務器上許多的程序在跑,并對內存有較高的限制要求不要影響到其它的程序,那就要做一些配置了。
開發(fā)環(huán)境
在開發(fā)環(huán)境,你可以編輯你的項目文件,加上以下配置,重新生成即可:
<PropertyGroup> <ServerGarbageCollection>false</ServerGarbageCollection> </PropertyGroup>
生產環(huán)境
可以不用修改重新部署,直接到你的程序中找到 *.runtimeconfig.json,如:ZKEACMS.WebHost.runtimeconfig.json,修改"System.GC.Server": false,重啟程序即可:
"configProperties": {
"System.GC.Server": false
}
參考資料:https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals
以上這篇.Net Core內存回收模式及性能測試對比分析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于ASP.NET Core數(shù)據(jù)保護生成驗證token示例
本篇文章主要介紹了基于ASP.NET Core數(shù)據(jù)保護生成驗證token,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Asp.net程序優(yōu)化js、css實現(xiàn)合并與壓縮的方法
這篇文章主要介紹了Asp.net程序優(yōu)化js、css實現(xiàn)合并與壓縮的方法,使用第三方組件實現(xiàn)訪問時將js與css文件壓縮并緩存在客戶端的效果,非常具有實用價值,需要的朋友可以參考下2014-12-12
asp.net不用設置iis實現(xiàn)url重寫 類似偽靜態(tài)路由
說到不用設置iis,主要是為了實現(xiàn)在虛擬主機或是拿不到iis操作限的時候,不能添加isap又想實現(xiàn)類似于靜態(tài)化的程序實現(xiàn)方式,先聲明,這里最終要實現(xiàn)的效果是,最終可以用12345.html替換show.aspx?id=12345這樣的地址訪問功能,支持任意擴展名及無擴展2014-01-01
asp.net System.Net.Mail 發(fā)送郵件
一個師弟發(fā)了段代碼給我,說調試了很久發(fā)送郵件都沒有成功。自己使用過程中,也發(fā)現(xiàn)了很多問題,但最簡單的問題是“發(fā)件方”地址根本不支持smtp發(fā)送郵件。2009-04-04
ASP.NET?MVC使用Knockout獲取數(shù)組元素索引的2種方法
這篇文章介紹了ASP.NET?MVC使用Knockout獲取數(shù)組元素索引的2種方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08

