[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