[root@db-mysql-1 ~]# /etc/init.d/cgconfig start

[root@db-mysql-1 ~]# chkconfig cgconfig on

[root@db-mysql-1 ~]# iotop

  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND 

12704 be/3 root        0.00 B/s    0.00 B/s  0.00 % 99.99 % [jbd2/sdb-8]


可以控制的项目可以查看ls /cgroup/cpu/foo下有哪些文件

一、控制CPU

创建一个控制组foo的目录

mkdir -p /cgroup/cpu/foo/ 

cpu.cfs_quota_us设为50000是50%,相对于cpu.cfs_period_us的100000

echo 50000 > /cgroup/cpu/foo/cpu.cfs_quota_us

添加进程号到任务中

echo 12704 > /cgroup/cpu/foo/tasks



还有一种折中办法,也好使,也灵活,使用renice调整优先级,cpu利用率大于0.8并且运行于id号大于500的用户下就降低优先级

等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级,进程的默认优先级为0

renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'`


二、控制内存

创建内存控制组foo目录

mkdir -p /cgroup/memory/foo

分配1G,1024*1024*1024bytes

echo 1073741824 >  /cgroup/memory/foo/memory.limit_in_bytes

将控制的进程号加入到任务中

echo 12704 > /cgroup/memory/foo/tasks

进程超过阀值会被杀死


三、控制IO

mkdir -p /cgroup/blkio/foo

ls -l /dev/sdb查看主副设备号,1048576是1M/s

echo '8:16   1048576' >  /cgroup/blkio/foo/blkio.throttle.read_bps_device

限制为512K/s

echo '8:16   524288' >  /cgroup/blkio/foo/blkio.throttle.read_bps_device

echo 12704  > /cgroup/blkio/foo/tasks




四、使用ionice限制进程IO

ionice 把磁盘 IO 调度分成三类:


real time 实时调度,设置后立即访问磁盘,不管系统中其他进程是否有 IO,可能会使得其他进程处于等待状态,不能用在这里;

best effort 默认调度,可以指定调度优先级(从0到7,数值越小、优先级越高);同一优先级的进程采用 round-robin 算法调度;

idle 空闲调度,只有当前系统没有其他进程磁盘 IO 时,才能进行磁盘 IO.


限制为默认调度,一般不要用第一个real time,这里不合适,-n优先级,-p进程号,-c调度类型

ionice -p 12704 -c 2 -n 7


直接让进程当没有其他进程磁盘IO才进行IO,3就是idle,这种有点过分

ionice -p 12704 -c 3


利用/etc/security/limits.conf限制用户使用,一般需要重启。慎用

加入模块

echo 'session    required  /lib64/security/pam_limits.so'>>/etc/pam.d/login

知识:

#username|@groupname type resource limit

resource:

core - 限制内核文件的大小

data - 最大数据大小

fsize - 最大文件大小

memlock - 最大锁定内存地址空间

nofile - 打开文件的最大数目

rss - 最大持久设置大小

stack - 最大栈大小

cpu - 以分钟为单位的最多 CPU 时间

noproc - 进程的最大数目

as - 地址空间限制

maxlogins - 此用户允许登录的最大数目

ype:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。

soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。

*代表所有用户

vim /etc/security/limits.conf


#允许同时使用root登录两个用户 

root  -  maxlogins 2

#root  hard  maxlogins 2