taskset Cheatsheet - CPU Affinity
Linux 性能调优必备的 taskset 命令都在这里了,从 CPU 绑核到 NUMA 优化,按场景分类整理,性能调优直接复制。
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 0CPU 列表格式,更易读
-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-7cset 创建 CPU 隔离区(需安装 cset)
💡 Tips
- CPU 亲和性可以减少缓存失效,提升性能,但过度绑定可能导致负载不均。
- 实时应用(如高频交易、音视频处理)适合绑定到隔离核心。
- NUMA 架构下,CPU 和内存节点绑定能显著减少跨节点访问延迟。
- taskset -c 使用 CPU 列表格式比十六进制掩码更易读,推荐日常使用。
- isolcpus 内核参数在启动时隔离 CPU,比 taskset 更彻底但需重启生效。
- 多线程进程需要用 -a 参数同时设置所有线程,否则只影响主线程。