一、简介
stress 可以对linux机器做压力测试,是一个比较好用的命令
二、创建一个ubuntu image
[root@iZ2vceej7yes1abpm7yec2Z ~]# docker run -it ubuntu Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 6a5697faee43: Pull complete ba13d3bc422b: Pull complete a254829d9e55: Pull complete Digest: sha256:fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1 Status: Downloaded newer image for ubuntu:latest [root@iZ2vceej7yes1abpm7yec2Z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest d70eaf7277ea 2 weeks ago 72.9MB
三、在容器中安装stress
由于pull下来的ubuntu是一个基础班,非常的干净,连vim都没有,所以先更换源:
root@76c25bdb1008:/# echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse" >/etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# more etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list root@76c25bdb1008:/# root@76c25bdb1008:/# echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list
apt-get update && apt-get install -y stress
root@76c25bdb1008:/# apt update Get:1 http://mirrors.aliyun.com/ubuntu xenial InRelease [247 kB] Get:2 http://mirrors.aliyun.com/ubuntu xenial-security InRelease [109 kB] Get:3 http://mirrors.aliyun.com/ubuntu xenial-updates InRelease [109 kB] Get:4 http://mirrors.aliyun.com/ubuntu xenial-proposed InRelease [260 kB] Get:5 http://mirrors.aliyun.com/ubuntu xenial-backports InRelease [107 kB] Get:6 http://mirrors.aliyun.com/ubuntu xenial/universe Sources [9802 kB] Get:7 http://mirrors.aliyun.com/ubuntu xenial/restricted Sources [5179 B] Get:8 http://mirrors.aliyun.com/ubuntu xenial/main Sources [1103 kB] Get:9 http://mirrors.aliyun.com/ubuntu xenial/multiverse Sources [215 kB] Get:10 http://mirrors.aliyun.com/ubuntu xenial/multiverse amd64 Packages [176 kB] Get:11 http://mirrors.aliyun.com/ubuntu xenial/universe amd64 Packages [9827 kB] Get:12 http://mirrors.aliyun.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] Get:13 http://mirrors.aliyun.com/ubuntu xenial/main amd64 Packages [1558 kB] Get:14 http://mirrors.aliyun.com/ubuntu xenial-security/universe Sources [244 kB] Get:15 http://mirrors.aliyun.com/ubuntu xenial-security/multiverse Sources [4952 B] Get:16 http://mirrors.aliyun.com/ubuntu xenial-security/main Sources [299 kB] Get:17 http://mirrors.aliyun.com/ubuntu xenial-security/restricted Sources [3239 B] Get:18 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 Packages [1841 kB] Get:19 http://mirrors.aliyun.com/ubuntu xenial-security/multiverse amd64 Packages [9249 B] Get:20 http://mirrors.aliyun.com/ubuntu xenial-security/universe amd64 Packages [969 kB] Get:21 http://mirrors.aliyun.com/ubuntu xenial-security/restricted amd64 Packages [15.9 kB] Get:22 http://mirrors.aliyun.com/ubuntu xenial-updates/universe Sources [533 kB] Get:23 http://mirrors.aliyun.com/ubuntu xenial-updates/restricted Sources [3941 B] Get:24 http://mirrors.aliyun.com/ubuntu xenial-updates/multiverse Sources [13.5 kB] Get:25 http://mirrors.aliyun.com/ubuntu xenial-updates/main Sources [655 kB] Get:26 http://mirrors.aliyun.com/ubuntu xenial-updates/universe amd64 Packages [1513 kB] Get:27 http://mirrors.aliyun.com/ubuntu xenial-updates/main amd64 Packages [2353 kB] Get:28 http://mirrors.aliyun.com/ubuntu xenial-updates/restricted amd64 Packages [16.4 kB] Get:29 http://mirrors.aliyun.com/ubuntu xenial-updates/multiverse amd64 Packages [26.7 kB] Get:30 http://mirrors.aliyun.com/ubuntu xenial-proposed/main Sources [9460 B] Get:31 http://mirrors.aliyun.com/ubuntu xenial-proposed/universe Sources [4365 B] Get:32 http://mirrors.aliyun.com/ubuntu xenial-proposed/universe amd64 Packages [18.3 kB] Get:33 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 Packages [98.5 kB] Get:34 http://mirrors.aliyun.com/ubuntu xenial-backports/universe Sources [12.3 kB] Get:35 http://mirrors.aliyun.com/ubuntu xenial-backports/main Sources [7276 B] Get:36 http://mirrors.aliyun.com/ubuntu xenial-backports/universe amd64 Packages [12.6 kB] Get:37 http://mirrors.aliyun.com/ubuntu xenial-backports/main amd64 Packages [10.9 kB] Fetched 32.2 MB in 7s (4906 kB/s) Reading package lists... Done Building dependency tree Reading state information... Done All packages are up to date. root@76c25bdb1008:/# root@76c25bdb1008:/# root@76c25bdb1008:/# root@76c25bdb1008:/# root@76c25bdb1008:/# apt-get install -y stress Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: stress 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 16.7 kB of archives. After this operation, 75.8 kB of additional disk space will be used. Get:1 http://mirrors.aliyun.com/ubuntu xenial/universe amd64 stress amd64 1.0.4-1 [16.7 kB] Fetched 16.7 kB in 0s (59.7 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package stress. (Reading database ... 4121 files and directories currently installed.) Preparing to unpack .../stress_1.0.4-1_amd64.deb ... Unpacking stress (1.0.4-1) ... Setting up stress (1.0.4-1) ... root@76c25bdb1008:/# which stress /usr/bin/stress root@76c25bdb1008:/#
stress --help
stress --help `stress' imposes certain types of compute stress on your system Usage: stress [OPTION [ARG]] ... -?, --help show this help statement --version show version statement -v, --verbose be verbose -q, --quiet be quiet -n, --dry-run show what would have been done -t, --timeout N timeout after N seconds --backoff N wait factor of N microseconds before work starts -c, --cpu N spawn N workers spinning on sqrt() -i, --io N spawn N workers spinning on sync() -m, --vm N spawn N workers spinning on malloc()/free() --vm-bytes B malloc B bytes per vm worker (default is 256MB) --vm-stride B touch a byte every B bytes (default is 4096) --vm-hang N sleep N secs before free (default none, 0 is inf) --vm-keep redirty memory instead of freeing and reallocating -d, --hdd N spawn N workers spinning on write()/unlink() --hdd-bytes B write B bytes per hdd worker (default is 1GB)
stress --vm 1 --verbose
启动一个worker ,分配256MB 然后释放 ,一直循环往复
:/# stress --vm 1 --verbose stress: info: [440] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd stress: dbug: [440] using backoff sleep of 3000us stress: dbug: [440] --> hogvm worker 1 [441] forked stress: dbug: [441] allocating 268435456 bytes ... stress: dbug: [441] touching bytes in strides of 4096 bytes ... stress: dbug: [441] freed 268435456 bytes stress: dbug: [441] allocating 268435456 bytes ... stress: dbug: [441] touching bytes in strides of 4096 bytes ... stress: dbug: [441] freed 268435456 bytes stress: dbug: [441] allocating 268435456 bytes ... stress: dbug: [441] touching bytes in strides of 4096 bytes ... stress: dbug: [441] freed 268435456 bytes stress: dbug: [441] allocating 268435456 bytes ...
如果分配的内存超过宿主机内存会发生什么?
/# stress --vm 1 --vm-bytes 50000M --verbose stress: info: [442] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd stress: dbug: [442] using backoff sleep of 3000us stress: dbug: [442] --> hogvm worker 1 [443] forked stress: dbug: [443] allocating 52428800000 bytes ... stress: FAIL: [443] (494) hogvm malloc failed: Cannot allocate memory stress: FAIL: [442] (394) <-- worker 443 returned error 1 stress: WARN: [442] (396) now reaping child worker processes stress: FAIL: [442] (451) failed run completed in 0s
容器 无法分配。
四、编写docker file 然后build一个命令行程序
ubuntu-stress]# more Dockerfile FROM ubuntu RUN apt-get update && apt-get install -y stress ENTRYPOINT ["/usr/bin/stress"] CMD []
ubuntu-stress]# docker build -t ninesun0318/ubuntu-stress .
ubuntu-stress]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ninesun0318/ubuntu-stress latest 675f527c4ed1 About a minute ago 99.7MB ninesun0318/flask latest 1f7f63f7ff02 26 hours ago 884MB python 3.6 1297140c6dd2 6 days ago 874MB ubuntu latest d70eaf7277ea 2 weeks ago 72.9MB centos latest 0d120b6ccaa8 3 months ago 215MB hello-world latest bf756fb1ae65 10 months ago 13.3kB
通过entrypoint + cmd 是一种流行的运行命令行方式
已一种传参的方式在容器中运行命令
ubuntu-stress]# docker run -it ninesun0318/ubuntu-stress --vm 1 --verbose stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd stress: dbug: [1] using backoff sleep of 3000us stress: dbug: [1] --> hogvm worker 1 [5] forked stress: dbug: [5] allocating 268435456 bytes ... stress: dbug: [5] touching bytes in strides of 4096 bytes ... stress: dbug: [5] freed 268435456 bytes stress: dbug: [5] allocating 268435456 bytes ... stress: dbug: [5] touching bytes in strides of 4096 bytes ... stress: dbug: [5] freed 268435456 bytes stress: dbug: [5] allocating 268435456 bytes ... stress: dbug: [5] touching bytes in strides of 4096 bytes ... stress: dbug: [5] freed 268435456 bytes stress: dbug: [5] allocating 268435456 bytes ...