taskset Cheatsheet - CPU Affinity

Linux 性能调优必备的 taskset 命令都在这里了,从 CPU 绑核到 NUMA 优化,按场景分类整理,性能调优直接复制。

SysOps·37 commands·Last updated 2026-07-21
Back to SysOps

基础用法 6

taskset -p <pid>
查看进程 CPU 亲和性掩码
taskset -c -p <pid>
以 CPU 列表格式查看亲和性
taskset -c 0,1 <command>
启动时绑定到 CPU 0 和 1
taskset -c 0-3 <command>
启动时绑定到 CPU 0-3
taskset -p <mask> <pid>
修改运行中进程的 CPU 掩码
taskset -cp 0,1 <pid>
修改运行中进程绑定到 CPU 0,1

CPU 掩码与列表格式 7

0x00000001
十六进制掩码,CPU 0
0x00000003
十六进制掩码,CPU 0 和 1
0x0000000f
十六进制掩码,CPU 0-3
-c 0
CPU 列表格式,更易读
-c 0,2,4
指定多个离散 CPU
-c 0-3,8-11
混合范围列表
taskset -c 0xff <command>
使用十六进制掩码绑定 CPU 0-7

绑定运行中进程 4

taskset -cp 0 $(pgrep nginx)
修改 nginx 主进程的 CPU 亲和性
for p in $(pgrep -f app); do taskset -cp 0-3 $p; done
批量修改匹配进程的亲和性
taskset -cp 0-3 <pid>
将指定 PID 绑定到 CPU 0-3
taskset -ap 0-1 <pid>
设置进程及其所有线程的亲和性

查看亲和性与系统信息 5

cat /proc/<pid>/status | grep Cpus_allowed
查看进程 CPU 掩码
cat /sys/devices/system/cpu/online
查看系统在线 CPU 编号
nproc
查看可用 CPU 核心数
lscpu
查看 CPU 架构详情(核数、缓存、NUMA)
lscpu | grep NUMA
查看 NUMA 节点信息

NUMA 架构优化 5

numactl --hardware
查看 NUMA 拓扑和节点分布
numactl -c 0 -m 0 ./app
绑定 CPU 和内存到 NUMA 节点 0
numactl --cpunodebind=0 --membind=0 ./app
完整 NUMA 绑定(CPU+内存)
numastat -p <pid>
查看进程在各 NUMA 节点的内存分布
numactl --interleave=all ./app
内存交叉分配到所有节点

实用场景 5

taskset -c 0-3 ./cpu_intensive_app
限制应用使用特定核心
taskset -c 4-7 ./realtime_app
隔离核心给实时应用
taskset -c 0 nginx
绑定 Nginx worker 到特定核心
taskset -c 1,2 mysql
绑定 MySQL 到特定核心
isolcpus=2,3
内核参数:启动时隔离 CPU 2,3 不参与调度

相关工具 5

htop
交互式查看各 CPU 核心使用率
top -1
查看各 CPU 核心负载
mpstat -P ALL 1
实时监控各 CPU 核心(需 sysstat)
pidstat -t -p <pid> 1
查看进程各线程 CPU 使用
cset shield -c 4-7
cset 创建 CPU 隔离区(需安装 cset)

💡 Tips

  • CPU 亲和性可以减少缓存失效,提升性能,但过度绑定可能导致负载不均。
  • 实时应用(如高频交易、音视频处理)适合绑定到隔离核心。
  • NUMA 架构下,CPU 和内存节点绑定能显著减少跨节点访问延迟。
  • taskset -c 使用 CPU 列表格式比十六进制掩码更易读,推荐日常使用。
  • isolcpus 内核参数在启动时隔离 CPU,比 taskset 更彻底但需重启生效。
  • 多线程进程需要用 -a 参数同时设置所有线程,否则只影响主线程。