最近了解到 CRIU 这个项目,全称是 Checkpoint/Restore In Userspace,一个用户态的 Linux 进程 Checkpoint/Restore 工具。可以应用的场景很多,比如进程的热迁移、启动加速、程序调试等方面。
下面是一个用 Node.js 演示的例子,比较基础。大家可以感受一下,看看自己有没有应用场景。
[h2]安装 CRIU[/h2]
在 CentOS 7 下安装 CRIU 还是非常简单的:
[h2]编写一个测试用的 Node.js 程序[/h2]
编写一个测试程序 index.js,放到 ~/test 目录。下面的程序每秒钟会输出 PID 和一个递增的数字:
- [/code][code](async () => {
复制代码- console.log(process.pid, idx++);
复制代码- })().catch(console.error);
复制代码- [/code][code]function sleep(n) {
复制代码- return new Promise((resolve) => {
复制代码
我们运行这个程序,大致会输出:
[h2]创建快照[/h2]
基于上面的输出我们知道进程的 PID 是 3501,那我们对这个程序产生快照:
- criu dump -j -t 3501 -D ~/testSnapshot
复制代码
然后 3501 的进程就被创建了快照在 ~/testSnapshot,并且进程也被结束了。
上面的参数中,-j 表示是 shell-jobs、-t 表示 PID(代表的进程树)、-D 表示快照保存的目录。
另外,请你记住进程结束的自增数字,比如:
[h2]恢复进程[/h2]
为了恢复进程,我们运行如下:
- criu restore -j -D ~/testSnapshot
复制代码 然后可以观察到进程被恢复了,而且自增数字还是当时的值,并且继续进行着自增,比如:
[h2]最后[/h2]
这是一个简单例子,为了让大家了解到有这么一种技术。就如开头说的一样,这项技术可以用于很多地方,详细可以参考:《Usage scenarios-CRIU》(点击阅读原文)。
|
|