Adachinですっ。
docker run時にCPUとMemoryを指定しないと、
dockerホストの全てのリソースをフルで発揮してしまうので、
今回試しに自前のdockerサーバで確認してみた。
簡単に適用できるのでバランスよく変えていくのがふさわしい!
■自宅dockerホストのCPUとMemoryを見てみた
・CPU数
1 2 3 4 5 6 7 8 9 |
adachin@adachin-docker ~ $ cat /proc/cpuinfo | grep "cpu cores" cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 |
4コアなんだけど仮想コアもあるから合わせて8コアかな。
・Memory数
1 2 3 4 5 |
adachin@adachin-docker ~ $ free -g total used free shared buffers cached Mem: 9 2 7 0 0 1 -/+ buffers/cache: 0 8 Swap: 0 0 0 |
10GB!?意外と少なかった。
■現在動いてるコンテナのリソースを確認してみた
1 2 3 |
adachin@adachin-docker ~ $ cat /sys/fs/cgroup/cpuset/system.slice/docker-dexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.scop e/cpuset.cpus 0-8 |
1 2 3 4 5 |
root@dxxxxxxxxxxxx ~ $ free -g total used free shared buffers cached Mem: 9 2 7 0 0 1 -/+ buffers/cache: 0 8 Swap: 0 0 0 |
確かに全部使ってる。。。
■マズイのでリソース制限してみた
とりあえず上記のコンテナを消して、CPUを1コア、Memoryを2GBにした。
基本的にオプションで追加できる。
1 2 |
--cpuset-cpus=1 --memory=2048mb |
1 |
$ docker run -it -p 80:80 --cpuset-cpus=1 --memory=2048mb --name=adachin-web01 tvirus17/nginx_centos6 /bin/bash |
■適用されているか確認
1 2 3 |
adachin@adachin-docker ~ $ cat /sys/fs/cgroup/cpuset/system.slice/docker-dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.scop e/cpuset.cpus 1 |
1 2 3 4 5 |
root@dxxxxxxxxxxxx ~ $ free -g total used free shared buffers cached Mem: 9 2 7 0 0 1 -/+ buffers/cache: 0 8 Swap: 0 0 0 |
cpuは変わってるが、メモリー変わっとらんやん!
docker statsでコンテナのリソース系が見れるので(topコマンドみたいなやつ)確認してみた。
1 2 3 4 5 |
adachin@adachin-docker ~ $ docker stats CONTAINER CPU% MEM USAGE / LIMIT MEM% NET I/O BLOCK I/O dxxxxxxxxxxxx 0.00% 3.314 MB / 2.097 GB 0.16% 6.946 kB / 3.105 kB 0 B / 61.44 kB →これ 6xxxxxxxxxxxx 0.00% 6.14 MB / 10.48 GB 0.06% 2.984 MB / 2.053 MB 0 B / 0 B xxxxx(省略) |
LIMITが2.097GBなので、ちゃんと変更出来てた。
■まとめ
ちなみにLinuxの標準機能cgroupsを使用して、リソース管理を実現しているとか。
他にもオプションたくさんあるので後で試してみよう。
てかswapも指定せねば。。
参考:https://docs.docker.com/engine/reference/run/
0件のコメント