linux怎么查看本机内存大小
267
2022-10-19
Docker第七篇(资源限制)
Linux如何进行资源管理
Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展。
Linux CGroupCgroup 可让您为系统中所运行任务(进程)的用户定义组群分配资源 — 比如 CPU 时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置您的 cgroup。
主要功能:
1、限制资源使用,比如内存使用上限以及文件系统的缓存限制。
2、优先级控制,CPU利用和磁盘IO吞吐。
3、一些审计或一些统计,主要目的是为了计费。
4、挂起进程,恢复执行进程。
Docker为什么要进行资源限制
1、默认情况瞎子啊,如果不对容器进行任何限制,容器能够占用当前操作系统能给容器提供的所有资源。
2、Docker将从Memory、CPU、BlockI/O三个方面进行限制。
3、为此OOME(Out Of Memory Exception)这个机制:
a、一旦发生OOME,宿主机下的任何进程都有可能被杀死,包括docker daemon在内。
b、由此,Docker调整了docker daemon的OOME优先级,以免内存不够使用的会后被杀死,当然如果宿主机下除docker daemon意外的其它所有进程都被杀死了,docker daemon留着也没有意义,比如docker下启动container也是以进程的方式存在的。
部署Dokcer环境前需要做的准备
1、为7应用做内存压力测试,熟悉正常业务需要求使用的最大内存情况,然后才能知道内存限制多大合适。
2、一定要限制内存的上限使用,否则苦不堪言。
3、对宿主机的硬件资源使用情况进行监控,发现问题快速定位问题,并提出解决方案。
4、如果内存使用充足,尽量不要使用swap、因为swap的使用会导致内存计算复杂(后面了解),对调度器很不友好。
设置方式
在Docker启动参数中,和内存限制有关的包括(参数的值一般是内存党校,也就是一个正数后面跟着内存单位b、k、m、g,分别对应bytes、KB、MB、GB):
-m --memory:容器能够使用的最大内存,最小值为4m,也就是4MB。
--memory-swap:容器能够使用的swap大小。
1、第一种情况下,如果内存设置12GB,swap设置为24GB,可用的物理内存是12GB,但是可用的swap空间不是24GB,是24-12=12GB,如果内存和swap设置为一样话,就等于没有swap资源可用(swap大小的划分一般原则是物理内存的1.5到2倍)
2、第二种情况下,如果设置swap分区为0,按照第三种情况解释,如果开启了swap但是没有设置,swap空间为内存的2倍。如果第二种情况swap设置0,内存设置8GB,最后swap可用空间就是2x8GB=16GB,物理内存还是8GB。
3、第三种情况就不用解释了,不设置,就别加--memory-swap这个参数。
4、第四种情况,如果swap设置为-1,内存设置为8GB,最后可用的swap空间是宿主机设置的swap所有空间,可用的物理内存还是8GB。
最后,相信很多同学会像我一样刚接触docker时候,直接进容器使用free -h查看内存和swap使用情况,这里面展示不全是,所以不要来这里查看,可以在宿主机上使用docker stats 容器id/或者name查看。
CPU资源限制
这里说的CPU限制是指vCPU,也就是我们通常说的线程。比如我们有台服务器,他是8核16线程,那vCPU总数就是16个,而非8个。限制的方法有两种,第一种是指按照比例来限制,第二种是按照绝对数量进行限制。具体参数和方法如下:
--cpuset-cpus=" ",允许使用的 CPU 集,值可以为 0-3,0,1(vCPU的个数是从0开始计算的,比如是4核,就是0、1、2、3,比如我想用0和1这两个vCPU,引号里面加入0,1即可,注意中间是逗号,如果想用0,1,2,可以直接写成0-2)
-c,--cpu-shares=0,CPU 共享权值(相对权重),默认值 1024。(这里一定是128的倍数,比如同一台docker宿主机上,开始我设置了2048,也就是说是我把vCPU分成了2份,我一个container独占了。后来又来了一个container,我设置了1024,那这次就等于把vCPU分成了3份,前者占两份,我占一份。结果又来了一个container,我设置了4096,也就等于又把vCPU重新划分成了7份,我占4份,前者还是占用1份,开始那个容器还是占用2份。也就是说vCPU总量没有发生变化,但是我把他一点一点的划分成了很多份.当然你也可以设置512或者256,最终划分的还是份数)
--cpus,能够限制容器可以使用的主机 CPU 个数,并且还可以指定如 1.5 之类的小数(这里指的是CPU核数,不是线程vCPU。1.5的意思是它可以使用百分之一百五的CPU,不一定是第一个CPU加第二个CPU的百分之五十,几个CPU加起来给你凑够百分之一百五就行)
附加:
1、查看逻辑CPU个数bai:du
#cat /proc/cpuinfo |grep "processor"|sort -u|wc -l
2、查看物理CPU个数:zhi
#grep "physical id" /proc/cpuinfo|sort -u|wc -l
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~