首页/系统/Linux 运维命令速查/场景:把折腾任务钉到指定核
进程与作业69 条

场景:把折腾任务钉到指定核

跑压测/挖矿类干扰任务前:用 taskset 圈定 CPU 范围,把影响限制在预留核上,保护核心业务。

Linux 运维命令速查系统更新于 2026-10-13

这个场景解决什么

跑压测、编码、批量计算这类会干扰业务的作业之前,用 taskset 把进程圈定在指定 CPU 上,把影响限制在预留核范围内,核心业务所在的核心就基本不受冲击。它属于轻量手段,子进程默认继承亲和性;要长期稳定的隔离,仍应使用 cgroup 的 cpuset。

基本信息

场景隔离高负载任务对业务的 CPU 影响
组合方式taskset -c 核列表,叠加 nice 与 ionice
查看方式ps -o psr 查看进程当前所在核
局限重启与新起进程需重新绑定(子进程默认继承)

典型使用场景

  • 压测前把压力任务限制在预留核上
  • 批处理任务与在线业务混部时的隔离
  • 排查某个进程实际运行在哪个核上
  • 复现单核瓶颈问题时限定运行范围
  • 临时降低干扰任务的调度优先级
  • 演示多核调度对性能的实际影响

组合使用

组合使用
nproc                                # 先看核数,例如 8 核
taskset -c 6,7 nice -n 19 ionice -c3 ./stress-test.sh   # 限定在 6、7 核
ps -o pid,psr,ni,cmd -p $(pgrep -f stress-test | head -1)   # 查看所在核与优先级
taskset -cp $(pgrep -f stress-test | head -1)   # 查看现有进程的亲和性
taskset -c 0-5 ./low-latency.sh      # 让低延迟任务避开被占用的核
taskset -c 2 bash -c './worker.sh'   # 只绑定,不叠加其它控制

手段对照

手段粒度适用场景
taskset进程或线程级临时隔离与验证
niceCPU 调度优先级降低份额,不限定核
cgroup cpuset资源组级长期稳定的核隔离
systemd AllowedCPUs单元级服务化之后的正式做法
PSR 字段观察当前所在核核对绑定是否生效
taskset 只约束启动时的 CPU 亲和性:程序内部如果自行修改亲和性,或 fork 出的新进程被显式指定,绑定就可能不成立,默认情形下子进程会继承。
钉核之后负载更集中:绑定前先确认目标核上是否跑着关键服务,用 ps -o psr 核对现状再动手。
更彻底的隔离应交给 cgroup 的 cpuset 或 systemd 的 AllowedCPUs:它们对资源组生效,服务重启后依然有效。
压测结束记得复查进程是否真的留在预留核上:用 ps -o psr 核对一次,比相信启动时的绑定更可靠,也能发现程序内部改过亲和性的情况。

易错点

  • 钉核前不核对核上跑着什么:把业务与压力任务挤到同一个核
  • 假设绑定永久有效:重启或新起的进程不再受限,隔离悄然失效
  • 只在启动时绑定:程序内部调整亲和性后失效却无人察觉
  • 用 nice 代替钉核:优先级只影响调度份额,无法限定运行范围

数据来源与参考

  • man 1 taskset(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌