SlideShare a Scribd company logo
1 of 22
朱延海(高阳)
核心系统研发部
2012-07
 项目背景:主站的现状
 选型的过程
 Cgroup/LinuxContainer介绍
 定制和开发
 存在的问题和对策
 主站:跑在xen虚拟机上的Java应用
 处理业务逻辑,本地无重要存储,无状态。
 一台物理机部署3台虚拟机
 双路Xeon,48GB内存
 多数应用是非交易相关的
 有1/3虚拟机峰值Load小于0.5
 基本无磁盘IO,主要资源需求集中于cpu和内存
 机器数量非常多
 一台物理机跑更多虚拟机
 更好的组合应用,做到集群利用率均衡
 消耗资源多的和少的部署在一起
 核心应用和非核心部署在一起
 如果某台虚拟机流量上升需要更多资源,
给它分配的内存和cpu也增加,反之亦然。
 不增加监控、运维成本
 Operating system-level virtualization
 各种称呼, “containers”, “jails”, 增强的chroot
 Container是安全容器与资源容器的组合
 安全容器:chroot, UID/PID/IPC/Network Namespace
 资源容器:Control Cgroup (Cgroup)
 实现
 Linux
▪ OpenVZ, Linux-VServer, LinuXContainer(LXC)
 Solaris Zones
 FreeBSD Jails
 LXC = Namespace + Cgroup
 基于进程组的资源管理
 基础框架 + 子控制器
 使用Cgroup的分组机制,对一组进程就某种系统资源实现资
源管理。
 cpuset子控制器
 为进程组分配一组允许使用的CPU和内存结点
 memcg子控制器
 限制进程组允许使用的物理内存
 只限制匿名页和PageCache,不包括内核自己使用的内存
 内存紧张时使用与全局回收同样的算法在组内回收
 Blkio子控制器
 限制进程组的磁盘IO带宽
 实际控制的是磁盘为各进程组服务的时间片数量,和进程调
度器cfs针对cpu的分时服务原理相同
动态迁移 CPU增减 内存增减
XEN(半虚拟化) 支持 通过Guest OS CPU
热插拔机制支持
通过balloon driver
支持
KVM(全虚拟化) 支持 通过Guest OS CPU
热插拔机制支持
通过balloon driver
支持
LinuXContainer
(LXC)
不支持 通过cpuset和CFS
组调度扩展支持
通过Cgroup支持
速度 异构模拟 可运行不同OS 安全隔离性
XEN(半虚拟化)比本地环境慢 支持 支持 强
KVM(全虚拟化) 比本地环境慢 支持 支持 强
LXC 同本地环境 不支持 不支持 差
•http://www.linux-kvm.org/page/CPUHotPlug
•http://virt.kernelnewbies.org/TechComparison
•http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines
 优点
 虚拟化开销小,一台物理机跑很多“小”虚拟机
 通过Cgroup增减CPU/内存非常方便,调整速度很快
 和本地环境相同的速度
 缺点
 不能热迁移  调度流量,而不是调度机器
 不能模拟不同体系结构、装不同os  不需要
 安全隔离差  内部集群,由运维操作
 ForkBomb、优先级反转、Cgroup实现缺陷  见招拆招
▪ Memcg不能控制buffer和内核内存
 Proc下的多数文件不认识Container ,top/sar/free/iostat
都用不了 自己按需求修改内核
 /proc没有“虚拟化”
 为每个Container计算Load和CPU利用率
 社区已有部分Patch,但没被接受
 Upstream内核中为了提高SMP伸缩性,计算Load变
得非常复杂—而且有Bug,幸好我们目前不需要
 如何表示与自己共享CPU的其他Container占用的
CPU时间?借用半虚拟化中的steal time概念
 为每个Container维护/proc/meminfo
 社区已有部分Patch,但仍然不被接受
 Buffer列只能显示零
 内存总量即为Cgroup允许的该容器内存上限
 重新思考最基础的设计
 Hotspot 的GC堆大小(-Xmx)和mem cgroup的上
限(hard limit)如何取值?堆内和堆外内存应该
给多少?
 内存满了会发生什么?
 匿名页被交换到磁盘上
 Page cache页直接丢弃,脏页丢弃前先回写
 部署大量Java应用时内存主要是GC堆的匿名页
 垃圾所占匿名页从其失去最后一个引用之时起到下
次GC之时止不会被访问,被交换出去的概率相对更
大
 把垃圾交换到磁盘上是一种浪费
 Cgroup可以动态调整内存上限,但Hotspot
的GC堆大小是启动时设定的
 基本想法:在内存紧张时,“摘掉”GC堆中
垃圾对象所占的物理内存
 内存紧张可能由于全局内存缺乏,也可能由于
cgroup组内内存不足
 仍然不能让GC堆扩大,但可以一开始就设个比
较大的值(overcommit),在资源紧张时让其缩小
 对GC堆上限(-Xmx)和memcg上限(hard limit)这
两个参数不再敏感
 有许多Container,该回收谁的内存?
 Shares: Container的权重,我们在这里使用其允许
使用的最大内存总量做为权重
 Pages: Container实际使用的内存量
 回收倾向 = Shares / Page,越小越容易被选 中
 希望的行为
 Container活跃时得到允许范围内尽可能多内存
 Container的工作集缩小(不活跃)时剥夺它的内存
 引入内存活跃程度百分比α,通过定期扫描页得到
 引入不活跃内存惩罚系数idle_tax ∈[1, +∞)
 回收倾向 = Shares / Pages * (α + idle_tax * (1 – α) )
 算法来自Vmware ESX Server
 内存还剩多少时触发?
 Full GC时Young Gen中活对象先整体提升,所以内存使用量
可能出现先升后降的现象
 Full GC用时远长于一次kswapd活动,内存用量在Full GC期间
可能继续上涨至direct reclaim
 必须考虑和Page cache用量的平衡
 目前只支持ParallelGC collector,不支持CMS
 numa aware
 目前实现把每个numa结点视为单独的机器计算
 然而ParallelGC collector不是numa-aware的,被某个内存紧
张的结点挑中的Container回收到的内存未必在这个结点上
 内存压力有可能来自于应用内存持续泄露,此时oom比
触发GC来回收内存更好
 谢谢!
 提问时间
 Upstream内核中Load计算不准的Bug
 [Patch] sched: Cure load average vs NO_HZ woes
 [Patch] sched: Cure more NO_HZ load average
woes
 [Patch] sched: Fix nohz load accounting – again!
 [PATCH] sched: Folding nohz load accounting
more accurate
 一个内核线程定期扫描各Container的内存使
用情况, 得到内存活跃程度百分比α
 [patchset] idle page tracking / working set
estimation from Google,在此基础上修改
 使用Eventfd通知用户态程序
 一个用户态伺服程序,用来接通知并转发给
Hotspot JVM
 kernel patch changed lines约3k行
 修改Hotspot,通过AttachAPI实现触发Full GC
和使用madvise()释放内存(需要考虑很多细节)
 约700行Hotspot patch
 “Memory Resource Management inVmware
ESX Server”, CarlWaldspurger

More Related Content

What's hot

低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索
Feng Yu
 
数据库性能模型与容量规划
数据库性能模型与容量规划数据库性能模型与容量规划
数据库性能模型与容量规划
freezr
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
Feng Yu
 
OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案
freezr
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事
freezr
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
Feng Yu
 
“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql
knuthocean
 
Ocean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaOcean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in china
knuthocean
 

What's hot (16)

低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索
 
数据库性能模型与容量规划
数据库性能模型与容量规划数据库性能模型与容量规划
数据库性能模型与容量规划
 
Ceph bluestore-tiering-2018-11-15
Ceph bluestore-tiering-2018-11-15Ceph bluestore-tiering-2018-11-15
Ceph bluestore-tiering-2018-11-15
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
 
OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践
 
“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql“云存储系统”赏析系列分享三:Sql与nosql
“云存储系统”赏析系列分享三:Sql与nosql
 
MogileFS
MogileFSMogileFS
MogileFS
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
 
Ocean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in chinaOcean base海量结构化数据存储系统 hadoop in china
Ocean base海量结构化数据存储系统 hadoop in china
 

Viewers also liked (6)

Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面
 
Презентация
ПрезентацияПрезентация
Презентация
 
Docker在豆瓣的实践 刘天伟-20160709
Docker在豆瓣的实践 刘天伟-20160709Docker在豆瓣的实践 刘天伟-20160709
Docker在豆瓣的实践 刘天伟-20160709
 
Mr
MrMr
Mr
 
Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
 
Seven problems of Linux Containers
Seven problems of Linux ContainersSeven problems of Linux Containers
Seven problems of Linux Containers
 

Similar to 4 高阳 淘宝主站cgroup资源控制实践

Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
Monster Supreme
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
isnull
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
Cosey Lee
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
Cevin Cheung
 
了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance
maclean liu
 
Bdwf11 netezza james_zheng
Bdwf11 netezza james_zhengBdwf11 netezza james_zheng
Bdwf11 netezza james_zheng
bigdatawf
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
kyhpudding
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.ppt
Frank Cai
 

Similar to 4 高阳 淘宝主站cgroup资源控制实践 (20)

Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
 
Baidu Cloud Foundry
Baidu Cloud FoundryBaidu Cloud Foundry
Baidu Cloud Foundry
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
 
如何使用 Xhprof 分析網站效能 (真實案例)
如何使用 Xhprof 分析網站效能 (真實案例)如何使用 Xhprof 分析網站效能 (真實案例)
如何使用 Xhprof 分析網站效能 (真實案例)
 
賽門鐵克 NetBackup 7.5 完整簡報
賽門鐵克 NetBackup 7.5 完整簡報賽門鐵克 NetBackup 7.5 完整簡報
賽門鐵克 NetBackup 7.5 完整簡報
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redis
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
 
了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance
 
Bdwf11 netezza james_zheng
Bdwf11 netezza james_zhengBdwf11 netezza james_zheng
Bdwf11 netezza james_zheng
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
 
Acronis iomega文件备份和虚拟机数据保护方案
Acronis iomega文件备份和虚拟机数据保护方案Acronis iomega文件备份和虚拟机数据保护方案
Acronis iomega文件备份和虚拟机数据保护方案
 
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.ppt
 
网站存储经验谈pdf
网站存储经验谈pdf网站存储经验谈pdf
网站存储经验谈pdf
 

More from drewz lin

Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
drewz lin
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13
drewz lin
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrich
drewz lin
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
drewz lin
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
drewz lin
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
drewz lin
 
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equalCsrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equal
drewz lin
 
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
drewz lin
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansen
drewz lin
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
drewz lin
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
drewz lin
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentation
drewz lin
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
drewz lin
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
drewz lin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowasp
drewz lin
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
drewz lin
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013
drewz lin
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
drewz lin
 
新浪微博稳定性经验谈
新浪微博稳定性经验谈新浪微博稳定性经验谈
新浪微博稳定性经验谈
drewz lin
 
无线App的性能分析和监控实践 rickyqiu
无线App的性能分析和监控实践 rickyqiu无线App的性能分析和监控实践 rickyqiu
无线App的性能分析和监控实践 rickyqiu
drewz lin
 

More from drewz lin (20)

Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrich
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
 
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equalCsrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equal
 
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansen
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentation
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowasp
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
 
新浪微博稳定性经验谈
新浪微博稳定性经验谈新浪微博稳定性经验谈
新浪微博稳定性经验谈
 
无线App的性能分析和监控实践 rickyqiu
无线App的性能分析和监控实践 rickyqiu无线App的性能分析和监控实践 rickyqiu
无线App的性能分析和监控实践 rickyqiu
 

4 高阳 淘宝主站cgroup资源控制实践

  • 2.  项目背景:主站的现状  选型的过程  Cgroup/LinuxContainer介绍  定制和开发  存在的问题和对策
  • 3.  主站:跑在xen虚拟机上的Java应用  处理业务逻辑,本地无重要存储,无状态。  一台物理机部署3台虚拟机  双路Xeon,48GB内存  多数应用是非交易相关的  有1/3虚拟机峰值Load小于0.5  基本无磁盘IO,主要资源需求集中于cpu和内存  机器数量非常多
  • 4.
  • 5.  一台物理机跑更多虚拟机  更好的组合应用,做到集群利用率均衡  消耗资源多的和少的部署在一起  核心应用和非核心部署在一起  如果某台虚拟机流量上升需要更多资源, 给它分配的内存和cpu也增加,反之亦然。  不增加监控、运维成本
  • 6.  Operating system-level virtualization  各种称呼, “containers”, “jails”, 增强的chroot  Container是安全容器与资源容器的组合  安全容器:chroot, UID/PID/IPC/Network Namespace  资源容器:Control Cgroup (Cgroup)  实现  Linux ▪ OpenVZ, Linux-VServer, LinuXContainer(LXC)  Solaris Zones  FreeBSD Jails
  • 7.  LXC = Namespace + Cgroup  基于进程组的资源管理  基础框架 + 子控制器  使用Cgroup的分组机制,对一组进程就某种系统资源实现资 源管理。  cpuset子控制器  为进程组分配一组允许使用的CPU和内存结点  memcg子控制器  限制进程组允许使用的物理内存  只限制匿名页和PageCache,不包括内核自己使用的内存  内存紧张时使用与全局回收同样的算法在组内回收  Blkio子控制器  限制进程组的磁盘IO带宽  实际控制的是磁盘为各进程组服务的时间片数量,和进程调 度器cfs针对cpu的分时服务原理相同
  • 8.
  • 9. 动态迁移 CPU增减 内存增减 XEN(半虚拟化) 支持 通过Guest OS CPU 热插拔机制支持 通过balloon driver 支持 KVM(全虚拟化) 支持 通过Guest OS CPU 热插拔机制支持 通过balloon driver 支持 LinuXContainer (LXC) 不支持 通过cpuset和CFS 组调度扩展支持 通过Cgroup支持 速度 异构模拟 可运行不同OS 安全隔离性 XEN(半虚拟化)比本地环境慢 支持 支持 强 KVM(全虚拟化) 比本地环境慢 支持 支持 强 LXC 同本地环境 不支持 不支持 差 •http://www.linux-kvm.org/page/CPUHotPlug •http://virt.kernelnewbies.org/TechComparison •http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines
  • 10.  优点  虚拟化开销小,一台物理机跑很多“小”虚拟机  通过Cgroup增减CPU/内存非常方便,调整速度很快  和本地环境相同的速度  缺点  不能热迁移  调度流量,而不是调度机器  不能模拟不同体系结构、装不同os  不需要  安全隔离差  内部集群,由运维操作  ForkBomb、优先级反转、Cgroup实现缺陷  见招拆招 ▪ Memcg不能控制buffer和内核内存  Proc下的多数文件不认识Container ,top/sar/free/iostat 都用不了 自己按需求修改内核
  • 11.  /proc没有“虚拟化”  为每个Container计算Load和CPU利用率  社区已有部分Patch,但没被接受  Upstream内核中为了提高SMP伸缩性,计算Load变 得非常复杂—而且有Bug,幸好我们目前不需要  如何表示与自己共享CPU的其他Container占用的 CPU时间?借用半虚拟化中的steal time概念  为每个Container维护/proc/meminfo  社区已有部分Patch,但仍然不被接受  Buffer列只能显示零  内存总量即为Cgroup允许的该容器内存上限
  • 12.  重新思考最基础的设计  Hotspot 的GC堆大小(-Xmx)和mem cgroup的上 限(hard limit)如何取值?堆内和堆外内存应该 给多少?  内存满了会发生什么?  匿名页被交换到磁盘上  Page cache页直接丢弃,脏页丢弃前先回写  部署大量Java应用时内存主要是GC堆的匿名页  垃圾所占匿名页从其失去最后一个引用之时起到下 次GC之时止不会被访问,被交换出去的概率相对更 大  把垃圾交换到磁盘上是一种浪费
  • 13.  Cgroup可以动态调整内存上限,但Hotspot 的GC堆大小是启动时设定的  基本想法:在内存紧张时,“摘掉”GC堆中 垃圾对象所占的物理内存  内存紧张可能由于全局内存缺乏,也可能由于 cgroup组内内存不足  仍然不能让GC堆扩大,但可以一开始就设个比 较大的值(overcommit),在资源紧张时让其缩小  对GC堆上限(-Xmx)和memcg上限(hard limit)这 两个参数不再敏感
  • 14.
  • 15.  有许多Container,该回收谁的内存?  Shares: Container的权重,我们在这里使用其允许 使用的最大内存总量做为权重  Pages: Container实际使用的内存量  回收倾向 = Shares / Page,越小越容易被选 中  希望的行为  Container活跃时得到允许范围内尽可能多内存  Container的工作集缩小(不活跃)时剥夺它的内存  引入内存活跃程度百分比α,通过定期扫描页得到  引入不活跃内存惩罚系数idle_tax ∈[1, +∞)  回收倾向 = Shares / Pages * (α + idle_tax * (1 – α) )  算法来自Vmware ESX Server
  • 16.  内存还剩多少时触发?  Full GC时Young Gen中活对象先整体提升,所以内存使用量 可能出现先升后降的现象  Full GC用时远长于一次kswapd活动,内存用量在Full GC期间 可能继续上涨至direct reclaim  必须考虑和Page cache用量的平衡  目前只支持ParallelGC collector,不支持CMS  numa aware  目前实现把每个numa结点视为单独的机器计算  然而ParallelGC collector不是numa-aware的,被某个内存紧 张的结点挑中的Container回收到的内存未必在这个结点上  内存压力有可能来自于应用内存持续泄露,此时oom比 触发GC来回收内存更好
  • 18.  Upstream内核中Load计算不准的Bug  [Patch] sched: Cure load average vs NO_HZ woes  [Patch] sched: Cure more NO_HZ load average woes  [Patch] sched: Fix nohz load accounting – again!  [PATCH] sched: Folding nohz load accounting more accurate
  • 19.
  • 20.  一个内核线程定期扫描各Container的内存使 用情况, 得到内存活跃程度百分比α  [patchset] idle page tracking / working set estimation from Google,在此基础上修改  使用Eventfd通知用户态程序  一个用户态伺服程序,用来接通知并转发给 Hotspot JVM  kernel patch changed lines约3k行  修改Hotspot,通过AttachAPI实现触发Full GC 和使用madvise()释放内存(需要考虑很多细节)  约700行Hotspot patch
  • 21.
  • 22.  “Memory Resource Management inVmware ESX Server”, CarlWaldspurger