就把 /foo 这个控制组的 cpu.shares 参数设为了 2048 。
前面说 , 有些文件是每个目录里共有的 。那些就是通用的设置 。其中 , tasks 和 cgroups.procs 是用来管理控制组中的进程的 。要把一个进程加入到某个控制组 , 把 pid 写入到相应目录的 tasks 文件即可 。如
代码如下:
# echo 5678 》/sys/fs/cgroup/cpu/foo/tasks
就把 5678 进程加入到了 /foo 控制组 。那么 tasks 和 cgroups.procs 有什么区别呢?前面说的对“进程”的管理限制其实不够准确 。系统对任务调度的单位是线程 。在这里 , tasks 中看到的就是线程 id 。而 cgroups.procs 中是线程组 id , 也就是一般所说的进程 id。将一个一般的 pid 写入到 tasks 中 , 只有这个 pid 对应的线程 , 以及由它产生的其他进程、线程会属于这个控制组 , 原有的其他线程则不会 。而写入 cgroups.procs 会把当前所有的线程都加入进去 。如果写入 cgroups.procs 的不是一个线程组 id , 而是一个一般的线程 id , 那会自动找到所对应的线程组 id 加入进去 。进程在加入一个控制组后 , 控制组所对应的限制会即时生效 。想知道一个进程属于哪些控制组 , 可以通过 cat /proc/《pid》/cgroup 查看 。
要把进程移出控制组 , 把 pid 写入到根 cgroup 的 tasks 文件即可 。因为每个进程都属于且只属于一个 cgroup , 加入到新的 cgroup 后 , 原有关系也就解除了 。要删除一个 cgroup , 可以用 rmdir 删除相应目录 。不过在删除前 , 必须先让其中的进程全部退出 , 对应子系统的资源都已经释放 , 否则是无法删除的 。
前面都是通过文件系统访问方式来操作 cgroups 的 。实际上 , 也有一组命令行工具 。
lssubsys -am 可以查看各子系统的挂载点 , 还有一组“cg”开头的命令可以用来管理 。其中 cgexec 可以用来直接在某些子系统中的指定控制组运行一个程序 。如 cgexec -g “cpu , blkio:/foo” bash。其他的命令和具体的参数可以通过 man 来查看 。
下面是个 bash 版的 cgexec , 演示了 cgroups 的用法 , 也可以在不确定是否安装命令行工具的情况下使用 。
代码如下:
#!/bin/bash《/p》 《p》# usage:
#。/cgexec.sh cpu:g1 , memory:g2/g21 sleep 100《/p》 《p》blkio_dir=“/sys/fs/cgroup/blkio”
memory_dir=“/sys/fs/cgroup/memory”
cpuset_dir=“/sys/fs/cgroup/cpuset”
perf_event_dir=“/sys/fs/cgroup/perf_event”
freezer_dir=“/sys/fs/cgroup/freezer”
net_cls_dir=“/sys/fs/cgroup/net_cls”
cpuacct_dir=“/sys/fs/cgroup/cpuacct”
cpu_dir=“/sys/fs/cgroup/cpu”
hugetlb_dir=“/sys/fs/cgroup/hugetlb”
devices_dir=“/sys/fs/cgroup/devices”《/p》 《p》groups=“$1”
shift《/p》 《p》IFS=‘ , ’ g_arr=($groups)
for g in ${g_arr[@]}; do
IFS=‘:’ g_info=($g)
if [ ${#g_info[@]} -ne 2 ]; then
echo “bad arg $g” 》&2
continue
fi
g_name=${g_info[0]}
g_path=${g_info[1]}
if [ “$g_path” == “${g_path#/}” ]; then
g_path=“/$g_path”
fi
echo $g_name $g_path
var=“${g_name}_dir”
d=${!var}
if [ -z “$d” ]; then
echo “bad cg name $g_name” 》&2
continue
fi
path=“${d}${g_path}”
if [ ! -d “$path” ]; then
推荐阅读
- 中国30岁男人平均收入 正常90后收入表
- 过来人中考备战三大经验 备战中考
- 拼多多退款平台处理中要多久
- 股市技术分析“三绝”其中这本最经典 底部三绝
- 发视频icloud同步中什么意思
- 全自动伞怎么打开
- 网贷还在还款中可以贷款买房吗
- snapchat怎么设置中文
- 中国皇室血统的13个姓 皇室姓氏有哪些
- 传统调味品酱油的种类
