温馨提示×

Linux进程如何迁移

小樊
64
2026-07-21 20:30:49
栏目: 智能运维

Linux 进程迁移(Process Migration)通常指 将进程从一个 CPU、NUMA 节点、容器或甚至一台机器迁移到另一个目标继续执行。不同层面的“迁移”含义不同,下面按常见场景系统说明。


一、CPU 层面的进程迁移(最常见)

1. 什么是 CPU 迁移

Linux 调度器会在 多核 CPU 之间迁移进程/线程,以平衡负载。

2. 自动迁移(调度器完成)

  • 完全自动
  • 由 CFS / sched domains 管理
  • 受以下影响:
    • CPU 亲和性(affinity)
    • NUMA
    • cgroup 限制

3. 手动控制 CPU 亲和性(taskset)

查看进程运行在哪些 CPU 上

taskset -p <pid>

绑定进程到指定 CPU

taskset -pc 0-3 <pid>

启动时指定

taskset -c 0,1 ./app

✅ 适用于:

  • 减少上下文切换
  • 实时性要求
  • NUMA 优化

二、NUMA 层面的进程迁移

1. 什么是 NUMA

多 CPU 插槽系统中,内存分节点(node),跨 node 访问慢。

2. 查看 NUMA 信息

numactl --hardware
numastat

3. 绑定 NUMA 节点

numactl --cpunodebind=0 --membind=0 ./app

4. 迁移已运行进程(部分支持)

numactl --cpunodebind=1 --membind=1 -p <pid>

⚠️ 不一定完全迁移内存,可能仍有跨 node 访问。


三、容器 / cgroup 层面的“迁移”

1. Docker 容器迁移(不是真正进程迁移)

Docker 不支持直接迁移运行中的进程。

常见做法:

  • 停止旧容器
  • 启动新容器
  • 共享数据卷
docker stop old
docker run -d --volumes-from old newimage

✅ 这是 服务迁移,不是进程级迁移


四、跨机器的进程迁移(Checkpoint / Restore)

这是真正的进程迁移,Linux 通过 CRIU 实现。

1. CRIU(Checkpoint Restore In Userspace)

原理

  1. 对进程做 checkpoint(保存状态)
  2. 拷贝状态到目标机器
  3. 在目标机器 restore

示例

criu dump -t <pid> -D /tmp/checkpoint
criu restore -D /tmp/checkpoint

✅ 可迁移:

  • 内存
  • 寄存器
  • 文件描述符
  • 网络连接(高级)

❌ 限制:

  • 不支持所有内核特性
  • 对多线程、GPU 支持有限

五、实时调度与迁移控制

1. 禁止进程迁移

chrt -r -p 99 <pid>

或

echo 0 > /proc/<pid>/cpuset.cpu_exclusive

2. 查看调度信息

cat /proc/<pid>/sched

六、进程迁移总结对比

场景 是否真正迁移 工具
CPU 核之间 ✅ 调度器 / taskset
NUMA 节点 部分 numactl
Docker 容器 ❌(重启) docker
跨机器 ✅ CRIU
内核线程 ❌ N/A

七、常见误区

❌ 进程不能“热迁移”到另一台机器像 VM 一样
✅ 只能用 CRIU,且有限制

❌ taskset 不等于 NUMA 迁移
✅ 只影响 CPU,不影响内存


八、你可以进一步说明

如果你愿意,可以告诉我:

  • 是 CPU / NUMA / 容器 / 跨机器 哪种迁移?
  • 是否涉及 实时系统 / 高性能计算 / 云原生?
  • 是否想做 自动负载均衡 还是 强制控制?

我可以直接给你可落地的方案或脚本。

0 踩