.NET 云原生技术使用调查
.NET Core 3.0 即将发布RC,.NET Core 3.0默认更好的支持Docker资源限制,官方团队也在努力让.NET Core成为真正的容器运行时,使其在低内存环境中具有容器感知功能并高效运行。
GC堆限制
.NET Core减少了CoreCLR默认使用的内存,如G0代内存分配预算,以更好地与现代处理器缓存大小和缓存层次结构保持一致。
在新的创建的GC堆数量的策略里,GC保留了一个内存片段,每个堆最小是16M,在低内存限制的机器上也可以很好的运行。在多核CPU的机器上运行时,系统并没有设置CPU的核数限制。例如,如果在48核计算机上设置160 MB内存限制,则不需要创建48个GC堆。也就是说如果设置160 MB限制,则只会创建10个GC堆。如果未设置CPU限制,应用程序可以利用计算机上的所有核心。
有了这样的新策略,可以不需要启用Docker环境下的.NET Core应用的工作站GC的工作负载。
支持Docker内存限制
Docker资源限制建立在cgroup之上,而cgroup是Linux的内核功能。从运行时的角度来看,我们需要定位cgroup原语。
设置cgroup限制时的.NET Core 3.0内存使用规则:
默认GC堆大小:容器上cgroup内存限制的最大值
20MB
或最大值的75%
每个GC堆的最小保留段大小
16MB
,这将减少在具有大量内核和小内存限制的计算机上创建的堆数
为了支持容器方案,添加了2个HardLimit配置:
GCHeapHardLimit - 指定GC堆的硬限制
GCHeapHardLimitPercent - 指定允许此进程使用的物理内存的百分比
如果同时指定了两者,则首先检查GCHeapHardLimit,并且只有在未指定GCHeapHardLimit时才检查GCHeapHardLimitPercent。
如果两者都未指定,但进程正在有内存限制的容器中运行,则默认是使用如下设置:
max(20mb,容器内存限制的75%)
如果指定了hardlimit配置,并且程序在有内存限制的容器中使用,GC堆的使用不会超过hardlimit限制,但总内存仍然受容器的内存限制。所以当我们统计内存消耗时,基于容器内存限制得出的数据。
举例:
进程在设置了200MB限制的容器中运行,用户还将GCHeapHardLimit配置为100MB。
如果把GC限制中100MB限制中的50MB用于GC,而容器限制中剩余的100MB用于其他用途,那么内存消耗即为(50+100)/200=75%。
GC将更积极地执行资源回收与释放,因为GC堆越接近GCHeapHardLimit
限制,就越能实现提供更多可用内存的目标,也越能使得应用程序可以继续而又安全地运行。如果算法计算出的结果认为此时的GC效率低下,那么将避免持续执行完全阻塞的GC。
即使GC堆完全压缩,GC依然会抛出一个OutOfMemoryException异常出来
,这是因为所分配的堆大小超过了GCHeapHardLimit
的限制。
由此可见,.NET Core 3.0的设计是要稳定运行于有资源限制的容器中。
支持DockerCPU限制
在CPU限制的情况下,Docker上设置的值将向上舍入为下一个整数值。此值是CoreCLR使用的最大有效CPU核数。
默认情况下,ASP.NET Core应用程序启用了服务器GC(它不适用于控制台应用程序),因为它可以实现高吞吐量并减少跨核心的争用。当进程仅限于单个处理器时,运行时会自动切换到工作站GC。即使您明确指定使用服务器GC,工作站GC也将始终用于单核环境。
通过计算CPU繁忙时间,设置CPU限制,我们避免了线程池的各种推导性竞争:
尝试分配更多的线程以增加CPU繁忙时间
尝试分配更少的线程,因为添加更多的线程不会提高吞吐量
你应该会看到很多关于Kubernetes和Docker的消息,以至于你可能想知道哪个更好。事实上,没有“更好”一说,因为它们所解决的问题是不一样的。Docker就像飞机,而Kubernetes就像飞机场。就像你不可能说“我应该基于哪个去旅行——飞机或者飞机场?”,Docker和Kubernetes也是一样的,你需要它们两个。今天做一个调查。
相关文章:
张善友:基于Kubernetes 构建.NET Core 技术中台(附视频回顾)
面向 Kubernetes 编程: Kubernetes 是下一代操作系统
Kubernetes应用部署模型解析(部署篇)
Docker+ Kubernetes已成为云计算的主流(二十六)
.NET Core Run On Docker By Kubernetes 系列文章汇总
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
.NET 云原生技术使用调查相关推荐
- KubeCon 2020 演讲集锦|《阿里巴巴云原生技术与实践 13 讲》开放下载
2020 年 7 月 30 日至 8 月 1 日,由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 Cloud Native + Open S ...
- 一份关于.NET Core云原生采用情况调查
调查背景 Kubernetes 越来越多地在生产环境中使用,围绕 Kubernetes 的整个生态系统在不断演进,新的工具和解决方案也在持续发布.云原生计算的发展驱动着各个企业转向遵循云原生原则(启动 ...
- 行云创新受邀加入信通院云原生成熟度专家组,开启业内首批云原生技术架构/应用成熟度评估测试
中国信息通信研究院(以下简称"中国信通院")2021年发布的<中国云原生用户调查报告>数据显示,用户正在将IT建设的中心转向云原生,现阶段已有近10%的用户在云原生领域 ...
- 《第四期(2021-2022)传统行业云原生技术落地调研报告——金融篇》正式发布
一.前言 随着数字化浪潮的来临,以容器.微服务为代表的云原生技术带来了一种全新的方式来开发.交付.迭代企业应用,重塑着传统行业的业务体系,加速着企业自身.以及产业生态的转型升级. 在此背景下,云原生技 ...
- 灵雀云第三期(2020-2021)传统行业云原生技术落地调研报告
引言 如果说2019年是"云原生技术商业化元年",那么2020年就是"云原生技术成为新常态"的一年.在这一年里,云原生技术正在快速开拓新的技术边界,支持新的应用 ...
- 微博云原生技术的思考与实践
来自:刘超的通俗云计算 本文由新浪微博架构师陈飞撰写,因见解深刻,故在此转载 现在越来越多的企业开始全面拥抱云计算,开始关注云原生技术.从管理物理数据中心到使用云主机,我们不用再关心基础运维.从云主机 ...
- 如何选择最优路径完成云原生上云?听这场阿里云特别分享【云原生技术与最佳实践】
云原生是一个较为广义的概念.对于云原生,不同的企业有着不同的理解. 如何判断项目是否已经到了云原生上云的阶段:云原生上云的方式该怎样抉择:想要把云原生技术发挥到极致又需要考虑哪些因素? 面对诸如此类问 ...
- 2022 年第一场云原生技术实践营开启报名
2021 年,我们在上海.深圳.广州.郑州.北京等地举办了不同主题的云原生技术实践营活动,和客户们共同交流.一起动手,体验容器.Serverless 等实实在在的云原生技术,实现降本增效. 2021年 ...
- 业内首款云原生技术中台产品云原生 Stack 来了!
今天,企业数字化转型依然面临很大的挑战,虽然有很多新技术不断涌现,云厂商.ISV 在帮助企业做转型,但是在实际落地过程中,企业仍然需要解决一些痛点,比如:当前,业界技术产品和理念非常繁多,怎么用新技术 ...
最新文章
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- 64位 linux 32位连接器,意法半导体为 32 位微控制器发布了一款自由的 Linux 集成开发环境...
- ws配置 zuul_SpringCloud系列研究---服务网关zuul
- Java and Jakarta - Hybris
- mysql专门导入程序_从MySQL导入导出大量数据的程序实现方法
- 考验程序员的一个FLASH游戏(Light-Bot)
- UIPikerView的属性和使用方法
- 软件测试实用技术与常用模板:内容提要
- 关于JavaScript中return的使用情况
- “混合云产业推进联盟”成立,ZStack实力助推
- COMSOL6.0 版本新功能:求解大型瞬态声学问题
- Learning ImageMagick 1: Lomo效果
- ORA-01720: grant option does not exist for 'HWCUST.H_OKC_REGION_TERRITORY_T'
- lesson 4 introductions
- window引导配置bcdedit
- macos支持exfat吗_在移动硬盘中安装win10和macos双系统
- android apk 安装目录成功,记录一次解决安装 Apk 兼容性问题
- 自动秘钥密码(Autokey)
- 10-SpringBoot启动图标修改
- torch.cat()的类型转换
热门文章
- android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)
- php token 验证,PHP如何实现Token验证
- scss2css vscode设置_VSCode下让CSS文件完美支持SCSS或SASS语法方法
- pdf文档遇到了共享冲突_如何将链接共享为PDF格式的Google文档链接
- android listpreference 自定义,Android – 我的ListPreference中的自定义行布局
- 杜鹃演绎奢华春装大片
- fir.im 持续集成技术实践
- POJ2184 Cow Exhibition(DP:变种01背包)
- SSH项目中遇到拦截器无法注入服务的问题
- c# 获取当前活动窗口句柄,获取窗口大小及位置