1. 程式人生 > >docker(九)docker容器資源配額控制之cpu

docker(九)docker容器資源配額控制之cpu

docker

taskset命令
taskset設定cpu親和力,task能夠將一個或多個進程綁定到一個或多個處理器上運行。
參數:
-c,--cpu-list 以列表格式顯示和指定 cpu
-p,--pid 在已經存在的 pid 上操作

設置只在1和2號cpu運行sshd進程程序
技術分享圖片

[root@apenglinux-002 ~]# taskset -cp 1,2 914
pid 914‘s current affinity list: 0-3
pid 914‘s new affinity list: 1,2

查看id為1的進程在哪個cpu上運行

[root@apenglinux-002 ~]# taskset -cp 1
pid 1‘s current affinity list: 0-3

設置 nginx cpu親和力

在 conf/nginx.conf 中,有如下一行:
worker_processes 1;
這裏用來配置nginx啟動幾個工作進程,默認為1.而nginx還支持一個名為worker_cpu_affinity的配置項,也就是說,nginx可以為每個工作進程綁定cpu。如下配置:
worker_processes 3;
worker_cpu_affinity 0010 0100 1000
這裏0010 0100 1000是掩碼,分別代表第2、3、4顆cpu核心。
重啟nginx後,3個工作進程就可以各自用各自的cpu了。

物理機一共用16個核心,創建的容器只能用0、1、2這三個內核

[root@apenglinux-002 ~]# docker run -itd --name cpu1 --cpuset-cpus 0-2 centos
eefe1ff3e567082c2d2d888911b239cfdc3407230f6c727ead05dfcf13368406
[root@apenglinux-002 ~]# cat /sys/fs/cgroup/cpuset/docker/eefe1ff3e567082c2d2d888911b239cfdc3407230f6c727ead05dfcf13368406/cpuset.cpu
cpuset.cpu_exclusive  cpuset.cpus           
[root@apenglinux-002 ~]# cat /sys/fs/cgroup/cpuset/docker/eefe1ff3e567082c2d2d888911b239cfdc3407230f6c727ead05dfcf13368406/cpuset.cpus
0-2

進入容器測試

通過docker exec <容器id或名字> taskset -c -p 1(容器內部第一個進程編號一般為1),可以看到容器中進程與cpu內核的綁定關系,可以認為達到了綁定cpu內核的目的。

[root@apenglinux-002 ~]# docker exec cpu1 taskset -cp 1
pid 1‘s current affinity list: 0-2

docker(九)docker容器資源配額控制之cpu