内存分配
-m 或者--memory :分配内存
--memory-swap:分配临时内存
docker run -it -m 200M --memory-swap=400M ubuntu :给ubuntu分配200兆内存和400M临时内存,默认分配可调控内存不能小于内存分配额,如果只给-m的参数,则memory-swap默认是两倍。
压力测试
命令:progrium/stress
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-byte 280M
--vm 分配一个线程
--vm-byte 线程的内存大小
--cpu 分配cpu数量
这里解释一下关于压力测试progrium/stress,他不是跑在docker中的,而是跑在host上面。而且这里有个坑,我查阅书籍的时候发现书上对这点都没有细致讲解,仅仅打印一条命令。让我以为他们之间内部是有某种联系将压测是打在了docker上面,其实不是。progrium只是代替docker显示数据跑满的情况下显示数据而已
cpu资源分配
默认情况下,所有docker都不会对cpu进行抢占,但是呢如果出现cpu吃紧,每个docker都去抢占资源了,所以这里docker研发者也是考虑到位了的
-c 或者 --cpu-share : 进行配置权重分配
docker run --name " a" -c 1024 ubuntu docker run --name "b" -c 512 ubuntu
这里解释一下:当cpu空闲是,这个分配时不起作用的,因为如果b容器运行资源/访问比较大,就很可能所占的cpu是大于a的,但是当两个访问都大的时候,a就是两倍b的cpu资源。1024只是一个量的比较,不做具体数值。
测试:
progrium 很直观的能看见docker运行情况,但是网上都没什么教程。我们这里来测试一下。
docker run --name "a" -c 1024 -it progrium/stress --cpu 2
docker run --name "b" -c 512-it progrium/stress --cpu 2
此时你去细看的话(用top)你就会发现两核的cpu几乎都被跑满,而且a的占用量是b的两倍。但是如果只有a或者b在高压的跑的话,cpu会被a或者b跑满
Block带宽资源分配
block io 是一种限制容器使用资源的方式,block io 指的是磁盘的读写,docker可以通过设置权重,限制bps,iops方式控制容器读写磁盘的带宽。
--blkio-weight :和--share-cpu类似,默认值是500,通过权重来进行比较
bps:byte per second :每秒读取数据量
iops :io per second :每秒读取io的次数
--device-read-bps /demo/a:20MB
--device-write-bps /demo/a:20MB
--device-read-iops /demo/a:20MB
--device-write-iops /demo/a:20MB
示例:docker run -it --device-write-bps /demo/a:20MB ubuntu
表示次容器对容器映射目录 即 host 的/demo/a 目录读写速度限制在20mb/s
用处:一般是没啥作用的,但是对性能有极致要求的人来说有不一样了,如果一个数据库的docker 和webdocker 放在同一台host上面,那么他们的读写是可以进行按需求配置的
网友评论