千家信息网

.NET Core 配置对GC工作模式与内存的影响是什么

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章将为大家详细讲解有关.NET Core 配置对GC工作模式与内存的影响是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。引出问题: Asp.
千家信息网最后更新 2024年11月27日.NET Core 配置对GC工作模式与内存的影响是什么

这篇文章将为大家详细讲解有关.NET Core 配置对GC工作模式与内存的影响是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析

在默认情况下,ASP.NET Core程序跑在K8s的Docker中内存使用率>=600MB,导致Docker容器频繁重启。并探讨并做了将ASP.NET Core项目配置System.GC.Server设置为False后,内存小于<=150MB的实验。

主要讲下什么是System.GC.Server,还有GC的二种模式。

对GC工作模式的分类: .NET Core 两种GC模式:

          
CopyServer GC / Workstation GC

Server GC :

主要应用于多处理器系统,并且作为ASP.NET Core宿主的默认配置。它会为每个处理器都创建一个GC Heap,并且会并行执行回收操作。该模式的GC可以最大化吞吐量和较好的收缩性。这种模式的特点是初始分配的内存较大,并且尽可能不回收内存,进行回收用时会很耗时,并进行内存碎片整理工作。

Workstation GC :

主要应用于单处理器系统,Workstation GC尽可能地通过减少垃圾回收过程中程序的暂停次数来提高性能。低负载且不常在后台(如服务)执行任务的应用程序,可以在禁用并发垃圾回收的情况下使用工作站垃圾回收。特点是会频繁回收,来阻止一次较长时间的回收。

Concurrent GC 工作方式 :

是一种GC的工作方式,如果你是单处理器的机器,那么即便配置了Concurrent选项为True,也不会生效。Server GC 和Workstation GC都可以开启Concurrent GC,在GC回收的过程中大部分时间用户线程可以并发运行。但只能影响到2代对象GC的过程,因为0代1代的时间太短了。

ASP.NET Core Project GC配置:

ASP.NET CORE项目中,通过System.GC.Server配置进行GC模式设置,创建项目默认的GC模式是: System.GC.Server : true (Server GC Concurrent Mode) 每CPU分配GC ;System.GC.Server : false (Workstation GC Concurrent mode),且Concurrent=1。

GC 内存分配原则:

GC heap用于保存0、1、2代的对象时,需要向系统申请时的基本单位是Segment,系统会分配指定值大小的Segment用于存储对象,这些值会随着程序的实际执行情况,由GC动态调整。正是由于有Segment的概念所以回出现内存碎片的问题,所以GC在垃圾回收过程中会进行内存整理,以减少内存碎片提高内存使用率。

Segment的大小取决于系统是32位还是64位,以及它正在运行的垃圾收集器的类型,下表列出了分配时系统所使用的默认值:

GC Model32-bit64-bit
Workstation GC16 MB256 MB
Server GC64 MB4 GB
Server GC with > 4 logical CPUs32 MB2 GB
Server GC with > 8 logical CPUs16 MB1 GB

Segment包括第2代对象,第2代对象会在内存允许的情况尽可能多的申请到内存,并使用多个段进行内存存储。
从GC中释放的内存量仅限于Segment的大小,但由于Segment采用动态大小进行了分配,这就使得释放后的大量内存占位导致内存使用率低下,前面也说过了,为了解决这个问题GC要对内存碎片进行整理,并中断所有线程的处理。

.NET Core GC的几种配置模式:

Concurrent & Workstation GC

          
Copyfalse
true

特点:在吞吐量和相应速度上寻找平衡点, GC Heap数量为1,GC threads在分配空间的线程,GC线程优先权和工作线程具有相同的优先权,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起。

Background & Workstation GC

          
Copyfalse
false

特点:最大化吞吐量并优化gen2 GC性能, GC Heap数量为1,background GC线程与工作线程有相同优先级,但都低于前台GC线程 ,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的)。

Concurrent & Server GC

          
Copytrue
true

特点:多处理器机器上使用多线程处理相同类型的请求以便最大化服务程序吞吐量, GC Heap数量为每处理器1个,每个处理器都有一个专职的GC线程,GC线程拥有最高线程的优先级,工作线程(非GC线程)会因为GC工作过程中会被挂起。

Background & Server GC

          
Copytrue
false

特点:在Concurrent & Server GC基础上优化gen2 GC性能, GC Heap数量为每处理器1个,每个处理器都有一个专职的GC background线程,background GC线程与工作线程有相同优先级,但都低于前台GC线程,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的)
ephemeral generation的前台GC工作时会挂起其他所有线程。

关于.NET Core 配置对GC工作模式与内存的影响是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

线程 内存 工作 处理 模式 处理器 配置 过程 分配 特点 系统 垃圾 对象 性能 程序 相同 使用率 吞吐量 大小 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 昆明非比网络技术公司待遇 数据库属于什么类型的数据模型 工程网络技术教程 如何做一个地图软件开发 恒祥网络技术有限责任公司 学术论文数据库 数据库概念模型CMD 检测服务器在线 关系型数据库最重要的功能 软件开发需要学什么视频 常德市网络安全宣传周活动报道 镇江erp软件开发 长春龙芯服务器一般多少钱 500本存入数据库 服务器能不能给轮胎加气 大专生有软件开发专业吗 php服务器没有删除权限 核心系统建设软件开发 曹玉磊中国农业银行软件开发中心 历届广州网络安全大会 榆树智能网络技术什么价格 服务器桌面图标隐藏 本领域的网络安全事件 重庆数据库通用多路锁控板设置 数据库的安全采用了哪些技术 软件开发人员薪金数学建模 柳州网络安全态势感知装置 安装本地数据库没有TNS 天津互联网科技学院 对网络安全股票的见解
0