之前介绍过如何使用ovs的qos技术对docker容器做网络资源限制,本次介绍如何使用docker本身的参数进行cpu与内存资源限制。
默认docker本身提供在创建容器的时候,进行内存、swap、cpu限制,但使用起来就得有些技巧需要注意,具体如下:
1、内存限制
默认docker内存限制可以使用-m参数进行限制,但如果仅-m参数,不添加其他,那么内存限制不会限制死,比如你-m 256m内存,那么容器里程序可以跑到256m*2=512m后才会被oom给杀死,
原因是源码里memory.memsw.limit_in_bytes 值是被设置成我们指定的内存参数的两倍。
源码地址是https://github.com/docker/libcontainer/blob/v1.2.0/cgroups/fs/memory.go#L39
内容如下
1
2
3
4
5
6
|
//
By default, MemorySwap is
set
to twice the size of RAM.
//
If you want to omit MemorySwap,
set
it to `-1'.
if
d.c.MemorySwap != -1 {
if
err := writeFile(
dir
,
"memory.memsw.limit_in_bytes"
, strconv.FormatInt(d.c.Memory*2, 10)); err != nil {
return
err
}
|
当然以上的内容都是有人发过的,不是我原创,地址是https://goldmann.pl/blog/2014/09/11/resource-management-in-docker/
下面是介绍一下我的测试过程
先限制内存为100m
1
|
docker run --restart always -d -m 100m --name=
'11'
docker.ops-chukong.com:5000
/centos6-base
:5.0
/usr/bin/supervisord
|
然后登陆容器后使用stress进行内存测试
PS:怕大家不知道如何安装stress,我也简单介绍一下
1
|
rpm -Uvh http:
//pkgs
.repoforge.org
/stress/stress-1
.0.2-1.el7.rf.x86_64.rpm
|
这一个命令就安装完成了
使用stress进行测试
本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1659972,如需转载请自行联系原作者