.Net Core內(nèi)存回收模式及性能測(cè)試對(duì)比分析
.NET Core 兩種GC模式:
Server GC / Workstation GC
Server GC :
主要應(yīng)用于多處理器系統(tǒng),并且作為ASP.NET Core宿主的默認(rèn)配置。它會(huì)為每個(gè)處理器都創(chuàng)建一個(gè)GC Heap,并且會(huì)并行執(zhí)行回收操作。該模式的GC可以最大化吞吐量和較好的收縮性。這種模式的特點(diǎn)是初始分配的內(nèi)存較大,并且盡可能不回收內(nèi)存,進(jìn)行回收用時(shí)會(huì)很耗時(shí),并進(jìn)行內(nèi)存碎片整理工作。用一句簡(jiǎn)單的話說(shuō),這個(gè)就是貪婪模式,通過(guò)盡可能多的獲得內(nèi)存和少回收來(lái)得到更好的性能。結(jié)果就是高內(nèi)存使用率性能較好。
Workstation GC :
主要應(yīng)用于單處理器系統(tǒng),Workstation GC盡可能地通過(guò)減少垃圾回收過(guò)程中程序的暫停次數(shù)來(lái)提高性能。低負(fù)載且不常在后臺(tái)(如服務(wù))執(zhí)行任務(wù)的應(yīng)用程序,可以在禁用并發(fā)垃圾回收的情況下使用工作站垃圾回收。特點(diǎn)是會(huì)頻繁回收,來(lái)阻止一次較長(zhǎng)時(shí)間的回收。結(jié)果就是低內(nèi)存使用率性能較差。
簡(jiǎn)單測(cè)試
以下測(cè)試結(jié)果都在同一臺(tái)計(jì)算機(jī)上,配置如下:
•Windows 7 Ultimate
•Intel Core I3-3220 @ 3.30 GHZ
•8G內(nèi)存,可用空間3GB
•SQL Server 2014
被測(cè)試的程序是ZKEACMS,首頁(yè),單面壓力測(cè)試,5000個(gè)請(qǐng)求,1000個(gè)并發(fā)。測(cè)試結(jié)果如下:
Server GC :
響應(yīng)結(jié)果如下,大概167.81 Req/s,這個(gè)結(jié)果并不是每次都一樣,會(huì)有所偏差,僅供參考:
內(nèi)存使用漲到差不多600多M左右,期間會(huì)有上下上下浮動(dòng),情況如下圖所示:
經(jīng)過(guò)反復(fù)多次的測(cè)試,內(nèi)存最高時(shí)漲到800多M,這與可用內(nèi)存有關(guān)系,如果可用內(nèi)存更多,還會(huì)漲到1G或更高然后再掉下來(lái):
Workstation GC :
響應(yīng)結(jié)果如下圖所示,大概151.33 Req/s,看起來(lái)是要比Server GC差一點(diǎn)點(diǎn),并且多次測(cè)試結(jié)果,總體都是更差些。
內(nèi)存使用情況一直在200M左右浮動(dòng),反復(fù)的壓力測(cè)試,也不會(huì)有大的大起大落,這與它積極的回收有關(guān)系:
內(nèi)存回收模式的切換
現(xiàn)在對(duì).Net Core的不同的內(nèi)存回收模式產(chǎn)生的影響已經(jīng)有了一定的了解,那就可以看你的個(gè)人情況做出選擇了。.Net Core默認(rèn)的貪婪模式可以得到更好的性能,這沒(méi)有什么問(wèn)題是,畢竟內(nèi)存不用放在那也是浪費(fèi)。當(dāng)然如果你的服務(wù)器上許多的程序在跑,并對(duì)內(nèi)存有較高的限制要求不要影響到其它的程序,那就要做一些配置了。
開(kāi)發(fā)環(huán)境
在開(kāi)發(fā)環(huán)境,你可以編輯你的項(xiàng)目文件,加上以下配置,重新生成即可:
<PropertyGroup> <ServerGarbageCollection>false</ServerGarbageCollection> </PropertyGroup>
生產(chǎn)環(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內(nèi)存回收模式及性能測(cè)試對(duì)比分析就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
樹(shù)莓派ASP.NET環(huán)境配置過(guò)程詳解
這篇文章主要介紹了樹(shù)莓派ASP.NET環(huán)境配置,本篇文章內(nèi)容是根據(jù)mono官網(wǎng)上查閱的配置教程所寫,需要的朋友可以參考下2022-04-04.NET?如何使用?OpenTelemetry?metrics?監(jiān)控應(yīng)用程序指標(biāo)
這篇文章主要介紹了.NET?使用?OpenTelemetry?metrics?監(jiān)控應(yīng)用程序指標(biāo),通過(guò)代碼演示了如何通過(guò) OpenTelemetry 把 Metrics 的數(shù)據(jù)發(fā)送到 Prometheus 里進(jìn)行查詢與展示,然后又演示了自定義相關(guān)指標(biāo)來(lái)滿足業(yè)務(wù)數(shù)據(jù)指標(biāo)的監(jiān)控,需要的朋友可以參考下2024-06-06深入解讀ASP.NET Core身份認(rèn)證過(guò)程實(shí)現(xiàn)
這篇文章主要介紹了深入解讀ASP.NET Core身份認(rèn)證過(guò)程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10visual studio 2015+opencv2.4.13配置教程
這篇文章主要為大家詳細(xì)介紹了visual studio 2015+opencv2.4.13配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11.Net?7.0實(shí)現(xiàn)支付寶退款和結(jié)果查詢接口
支付寶對(duì) .Net 的支持還是比較充分的,在每個(gè)接口文檔中都有關(guān)于 C# 語(yǔ)言的示例,這樣就大大降低了對(duì)接的難度,很容易上手,這篇文章主要介紹了支付寶退款和結(jié)果查詢接口簡(jiǎn)單實(shí)現(xiàn)(.Net?7.0),需要的朋友可以參考下2024-07-07頁(yè)面導(dǎo)出為Excel的時(shí)間格式的問(wèn)題
今天在網(wǎng)上搞了半天,終于搞定了這個(gè)問(wèn)題。發(fā)文慶祝。2008-11-11Asp.Mvc 2.0實(shí)現(xiàn)用戶登錄與注銷功能實(shí)例講解(2)
這篇文章主要介紹了Asp.Mvc 2.0實(shí)現(xiàn)用戶登錄與注銷功能,用戶登錄方式都是FORM表單驗(yàn)證方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08ASP.NET單選按鈕控件RadioButton常用屬性和方法介紹
RadioButton又稱單選按鈕,其在工具箱中的圖標(biāo)為 ,單選按鈕通常成組出現(xiàn),用于提供兩個(gè)或多個(gè)互斥選項(xiàng),即在一組單選鈕中只能選擇一個(gè)2014-04-04