扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关.Net Core内存回收模式及性能测试对比的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
专注于为中小企业提供做网站、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业城区免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。.NET Core 两种GC模式:
Server GC / Workstation GC
Server GC :
主要应用于多处理器系统,并且作为ASP.NET Core宿主的默认配置。它会为每个处理器都创建一个GC Heap,并且会并行执行回收操作。该模式的GC可以较大化吞吐量和较好的收缩性。这种模式的特点是初始分配的内存较大,并且尽可能不回收内存,进行回收用时会很耗时,并进行内存碎片整理工作。用一句简单的话说,这个就是贪婪模式,通过尽可能多的获得内存和少回收来得到更好的性能。结果就是高内存使用率性能较好。
Workstation GC :
主要应用于单处理器系统,Workstation GC尽可能地通过减少垃圾回收过程中程序的暂停次数来提高性能。低负载且不常在后台(如服务)执行任务的应用程序,可以在禁用并发垃圾回收的情况下使用工作站垃圾回收。特点是会频繁回收,来阻止一次较长时间的回收。结果就是低内存使用率性能较差。
简单测试
以下测试结果都在同一台计算机上,配置如下:
•Windows 7 Ultimate
•Intel Core I3-3220 @ 3.30 GHZ
•8G内存,可用空间3GB
•SQL Server 2014
被测试的程序是ZKEACMS,首页,单面压力测试,5000个请求,1000个并发。测试结果如下:
Server GC :
响应结果如下,大概167.81 Req/s,这个结果并不是每次都一样,会有所偏差,仅供参考:
内存使用涨到差不多600多M左右,期间会有上下上下浮动,情况如下图所示:
经过反复多次的测试,内存高时涨到800多M,这与可用内存有关系,如果可用内存更多,还会涨到1G或更高然后再掉下来:
Workstation GC :
响应结果如下图所示,大概151.33 Req/s,看起来是要比Server GC差一点点,并且多次测试结果,总体都是更差些。
内存使用情况一直在200M左右浮动,反复的压力测试,也不会有大的大起大落,这与它积极的回收有关系:
内存回收模式的切换
现在对.Net Core的不同的内存回收模式产生的影响已经有了一定的了解,那就可以看你的个人情况做出选择了。.Net Core默认的贪婪模式可以得到更好的性能,这没有什么问题是,毕竟内存不用放在那也是浪费。当然如果你的服务器上许多的程序在跑,并对内存有较高的限制要求不要影响到其它的程序,那就要做一些配置了。
开发环境
在开发环境,你可以编辑你的项目文件,加上以下配置,重新生成即可:
false
生产环境
可以不用修改重新部署,直接到你的程序中找到 *.runtimeconfig.json,如:ZKEACMS.WebHost.runtimeconfig.json,修改"System.GC.Server": false,重启程序即可:
"configProperties": { "System.GC.Server": false }
关于“.Net Core内存回收模式及性能测试对比的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流