Linux namespace
提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的namespace
中来实现资源隔离的目的.目前 Linux 中提供了六类系统资源的隔离机制,分别是:
-
Mount
: 隔离文件系统挂载点 -
UTS
: 隔离主机名和域名信息 -
IPC
: 隔离进程间通讯 -
PID
: 隔离进程的 ID -
NetWork
: 隔离网络资源 -
User
: 隔离用户和用户组的 ID
使用unshare
可以创建新的 namespace 来与主机隔离
ls -al /proc/$$/ns //查看当前 shell进程的 namespace
unshare --user -r /bin/bash //新建 user namespace,基于此打开新的 shell
ls -al /proc/$$/ns //可以发现除了 user,其他的 namespace 相同
Linux control groups
限制一个进程组能够使用的资源上限,包括 CPU,内存,磁盘,网络带宽等.同时可以对进程优先级设置,以及将进程挂起和恢复等操作.
限制 cpu 例子
cd /sys/fs/cgroup/cpu //
mkdir cpu_test //操作系统会自动填充目录
启动一个死循环,使其 CPU 占用率为 100%
echo $pid >> /sys/fs/cgroup/cpu/cpu_test/tasks //添加进程号到 tasks 文件
echo 20000 > /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us // cpu 限制为 20%