taskset -p 可查看并动态修改运行中 Web 服务器的 CPU 亲和性,无需重启服务:先用 ps 或 pgrep 获取主进程 PID(如 1892),执行 taskset -p 1892 查看当前掩码(如 ffffff 表示全核可用),再用 taskset -p 0x24 1892 或 taskset -pc 2,5 1892 修改绑定,加 -a 可同步所有线程,最后通过 taskset -p 和 top -H 验证生效。

直接用 taskset -p 查看并修改运行中 Web 服务器的 CPU 亲和性,无需重启服务,操作即时生效。
查清 Web 服务器进程 PID 和当前亲和掩码
先确认主进程(如 nginx master 或 apache httpd 父进程)的 PID:
- nginx:运行 ps aux | grep "nginx: master",取第一列 PID
- Apache:运行 pgrep -f "httpd.*-k start" 或 systemctl show -p MainPID httpd | cut -d= -f2
拿到 PID(例如 1892)后执行:
taskset -p 1892输出类似:pid 1892's current affinity mask: ffffff —— 这表示当前可在全部 24 个逻辑 CPU(0–23)上运行(0xffffff = 24 位全 1)。
用十六进制掩码精准设置 CPU 绑定
掩码每一位对应一个 CPU 核心,bit 0 是 CPU 0,bit 1 是 CPU 1……依此类推。例如:
- 只允许在 CPU 2 和 CPU 5 上运行 → 二进制 00100100 → 十六进制 0x24
- 绑定到 CPU 0、1、4、5 → 二进制 00110011 → 十六进制 0x33
执行修改命令:
成功后会返回新掩码,如 pid 1892's new affinity mask: 24。
用 -c 参数更直观地按编号指定核心
避免手动算掩码,直接用 CPU 列表语法:
taskset -pc 2,5 1892等价于上面的 0x24,但可读性强、不易出错。多核连续范围也支持,比如:
- taskset -pc 4-7,12 1892 → 绑定到 CPU 4、5、6、7 和 12
- 加 -a 可同步作用于所有线程(对 worker 进程/线程模型很关键):taskset -pca 2,5 1892
验证是否真正生效
仅看掩码不够,要确认调度行为已改变:
- 再次运行 taskset -p 1892 确认掩码已更新
- 用 top -H -p 1892,按 f → 选中 P (Last CPU used) 列,观察各线程实际运行在哪几个核心上
- 持续几秒刷新,若所有线程都只出现在你指定的核心(如 2 或 5),说明绑定成功
注意:如果 Web 服务器使用多进程模型(如 nginx worker_processes auto),需对每个 worker 进程单独绑定;若用多线程模型(如某些 Apache MPM),-a 参数能覆盖全部线程。


















