均衡分配Linux进程的CPU亲和力

Published: Tags: LINUX

Nginx有设置CPU亲和力的配置,只需要修改如下参数并重启进程:

worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;

但很多程序(比如PHP)并没有可以设置CPU亲和力的配置,可以使用如下脚本处理:

#!/bin/bash
# * * * * * /worker/cpu/affinity.sh &

CPUs=$(grep -c processor /proc/cpuinfo)
PIDs=$(ps aux | grep "php-fpm[:] pool" | awk '{print $2}')

i=0; for PID in $PIDs; do
    CPU=$(echo "$i % $CPUs" | bc)
    (( i++ ))
    taskset -pc $CPU $PID
done

以上脚本还可以优化,比如根据CPU的平均负载,让每个进程只在低负载CPU中执行。

参考:http://huoding.com/2016/07/19/528