「Linux」- control groups

内容简介

本部分介绍与cgroups有关的内容。

cgroups – control groups

它是Linux内核的一个特性,用于限制、管理进程使用的资源。

与nice(1)及/etc/security/limits.conf相比,cgroups更加灵活,它可以管理一组进程。

简单示例

在Linux中,有些应用程序十分消耗内存。比如火狐浏览器就是一个“内存大户”,还有Eclipse开发工具。

我们这里演示如何如何限制Eclipse使用的内存:

#!/bin/sh

# 安装
apt-get install cgroup-tools

# 配置
cgcreate -g memory:eclipse-demo
echo 1G > /sys/fs/cgroup/memory/eclipse-demo/memory.limit_in_bytes
cgexec -g memory:eclipse-demo /path/to/eclipse

# 验证

多种使用方式

由非常多的cgroups配置管理工具,这里只简单介绍几种:

(1)通过命名行工具,如cgcreate, cgexec等命令(以及/etc/cgconfig.conf配置文件),并且需要由开机脚本支持才能实现开机自动及自动加载。

(2)通过systemd管理(推荐)。

本文只介绍这两种方式。

通过命令行

Setting Up Linux cgroups – Control Groups
How to Limit CPU Usage of a Process on Linux
Limit memory for browser on Fedora

通过systemd服务

How to manage processes with cgroup on Systemd

Running Firefox in a cgroup (using systemd)

附加说明

#1 如果应用程序使用的内存达到限制后,会发生什么?

-「What’s the Linux kernel’s behaviour when processes in a cgroup hit their memory limit?
在默认情况下,由OOM监管cgroups。在启用OOM时,如果内存达到限制,进程会被OOM Killer立即结束。在禁用OOM时,如果内存达到限制,进程会被暂停,直到释放出新空间(但是实际情况是Eclipse一直挂在那里没有反应,所以最后我还是决定默默地启动OOM功能)。

如果要禁用OOM Killer可以执行echo 1 > /cgroup/memory/<your-group-name>/memory.oom_control(没错1表示禁用,而0表示启用)

参考文献

archlink/cgroups
Limit memory usage for a single Linux process
Trying to use cgroups in debian wheezy and no daemons