均衡分配Linux进程的CPU亲和力
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中执行。