本文将详细解释。NET核心配置对垃圾收集工作模式和内存。这篇文章的内容质量很高,所以边肖会分享给大家参考。希望你看完这篇文章后有所了解。
00-1010默认情况下,ASP.NET Core程序在K8s的Docker中运行,内存利用率=600MB,这导致Docker容器频繁重启。设定组态系统的实验。ASP.NET核心项目服务器为假,内存小于=150MB的讨论和做。
主要说说什么是系统。服务器和两种垃圾收集模式。
引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析
复制
服务器GC/工作站GC
对GC工作模式的分类: .NET Core 两种GC模式:
主要用于多处理器系统,是ASP.NET Core主机的默认配置。它为每个处理器创建一个垃圾收集堆,并并行执行回收操作。这种模式的GC可以最大化吞吐量和更好的收缩。这种模式的特点是初始分配的内存大,内存没有尽可能回收,回收和整理内存需要很长时间。
00-1010主要用于单处理器系统,Workstation GC可以通过尽可能减少垃圾收集时程序暂停的次数来提高性能。具有低负载和不频繁后台任务(如服务)的应用程序可以在禁用并发垃圾收集的情况下使用工作站垃圾收集。特点是频繁回收,防止较长时间的回收。
Server GC :
是GC的一种工作模式。如果您是单处理器机器,即使“并发”选项配置为“真”,它也不会生效。服务器垃圾回收和工作站垃圾回收都可以打开并发垃圾回收,在垃圾回收过程中,用户线程可以大部分时间并发运行。但只能影响第二代对象的GC进程,因为0代和1代的时间太短。
00-1010 ASP.NET核心项目,GC模式由系统设置。GC.Server配置,创建项目的默认GC模式为: system.gc.server3360 true(服务器GC并发模式),为每个CPU分配GC;System.gc.server: false(工作站gc并发模式),Concurrent=1。
Workstation GC :
GC堆存储0、1、2代对象时,对系统应用的基本单位是Segment,系统会分配指定值的Segment来存储对象。GC将根据程序的实际执行情况动态调整这些值。因为有了Segment的概念,内存碎片问题再次出现,所以GC会在垃圾收集过程中组织内存,减少内存碎片,提高内存利用率。
段的大小取决于系统是32位还是64位,以及它运行的垃圾收集器的类型。下表列出了系统在分配过程中使用的默认值:
Gc32位64位工作站gc16mb256mb服务器gc64mb4gb服务器Gc带4个逻辑CPU s32mb2gb服务器gc带8个逻辑CPU s16mb1gb段包含第二代对象,将尽可能申请内存,并使用多个段进行内存存储。
从垃圾收集释放的内存量受限于段的大小。但是,由于Segment是按动态大小分配的,因此在发布后会占用大量内存,从而导致内存利用率低。如前所述,为了解决这个问题,GC应该整理内存碎片并中断所有线程的处理。
p>
.NET Core GC的几种配置模式:
Concurrent & Workstation GC
Copy
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
特点:在吞吐量和相应速度上寻找平衡点, GC Heap数量为1,GC threads在分配空间的线程,GC线程优先权和工作线程具有相同的优先权,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起。
Background & Workstation GC
Copy
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
特点:最大化吞吐量并优化gen2 GC性能, GC Heap数量为1,background GC线程与工作线程有相同优先级,但都低于前台GC线程 ,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的)。
Concurrent & Server GC
Copy
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
特点:多处理器机器上使用多线程处理相同类型的请求以便最大化服务程序吞吐量, GC Heap数量为每处理器1个,每个处理器都有一个专职的GC线程,GC线程拥有最高线程的优先级,工作线程(非GC线程)会因为GC工作过程中会被挂起。
Background & Server GC
Copy
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
特点:在Concurrent & Server GC基础上优化gen2 GC性能, GC Heap数量为每处理器1个,每个处理器都有一个专职的GC background线程,background GC线程与工作线程有相同优先级,但都低于前台GC线程,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的)
ephemeral generation的前台GC工作时会挂起其他所有线程。
关于.NET Core 配置对GC工作模式与内存的影响是什么就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147383.html