cpu亲和性
taskset命令可以将进程绑核,格式为taskset -p -c cpu-list pid
,其中cpu-list是数字化的cpu列表,从0开始。多个不连续的cpu可用逗号连接,连续的可用-
连接,比如0,2,5-11等。
举例:
#我现在系统中存在四核的cpu
[root@server01 ceshi]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
......
#我可以通过以下命令主动将jh.sh这个脚本指定跑在编号为3的核上
[root@server01 ceshi]# taskset -c 3 ./jh.sh
#通过以下命令我确实可以看到jh.sh这个脚本已经跑到了编号3的核心上
[root@server01 ~]# ps -eo psr,command,pid | grep jh.sh | grep -v grep
3 /bin/bash ./jh.sh 27033
我们来验证一下看看编号为3的核心资源是否被占用
#通过以下信息我们可以发现cpu3的用户空间的占比确实高,且空闲率已经不足
[root@server01 ~]# mpstat -P ALL 2
Linux 3.10.0-957.el7.x86_64 (server01) 05/17/2021 _x86_64_ (4 CPU)
09:39:02 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:39:04 PM all 22.62 0.00 2.62 0.00 0.00 0.00 0.00 0.00 0.00 74.75
09:39:04 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
09:39:04 PM 1 0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.00 0.00 99.50
09:39:04 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
09:39:04 PM 3 90.50 0.00 9.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00
如果是已经存在的进程,我们可以通过以下命令主动让进程跑另外一个核心
[root@server01 ~]# ps -eo psr,command,pid | grep jh.sh | grep -v grep
3 /bin/bash ./jh.sh 30492
[root@server01 ~]# taskset -p -c 2 30492
pid 30492's current affinity list: 3
pid 30492's new affinity list: 2 <-代表进程已经跑到编号为2的核心上了
[root@server01 ~]# ps -eo psr,command,pid | grep jh.sh | grep -v grep
2 /bin/bash ./jh.sh 30492