linux资源限制的原理,Linux基础知识之资源限制

limit.conf    #通过pam_limit.so进行资源限制时使用的配置文件

因为kernel的按需延迟分配技术,程序申请的虚存大小不一定等于实际内存分配大小。

rss(Resident Set Size) 内存驻留大小,kernel实际分配的内存大小。对应top命令中的RES。

通过pam的limit.conf目前不能限制rss大小

as (Address Size) 虚存地址空间,程序希望使用的内存空间大小。对应top命令中的VIRT。

通过ulimit查询和修改当前用户的limit限制,普通用户只能修改soft限制,root用户可以修改limit.conf从而修改hard限制

limit.conf限制CPU时间单位是分钟,ulimit以秒为单位进行调节。

ulimit和limit不能限制磁盘I/O,对CPU和内存的限制比较基础

---------------------

cgroup 将系统分为多个controller,比如cpu,memory,blkio

进程通过cgred服务定义到某个cgroup子系统中,从而达到限制目的

cgconfig服务启动后,在根目录下产生/cgroup目录,每个控制器单独对应一个文件夹(cgroup子系统)。可以通过lssubsys -m 查看当前controller和子系统文件夹的对应关系。

controller生成的目录根据/etc/cgconfig.conf产生,同一个controller只能对应一个文件夹,同一个文件夹可以对应多个controller

cgroup的配置保存在/etc/cgconfig.conf,自定义的cgroup也是在此进行配置

#cgroup的基本结构如下

cgroup lesscpu{

#lesscpu为cgroup名称

cpu{

#controller从cpu继承,产生的子系统文件夹从cpu继承

cpu.shares = 100;

#cpu份额值,默认等于父controller的值,设置值不能超过父controller的值

}

}

cgroup morecpu{

cpu{

cpu.shares = 300;

#同一级子系统,份额值高于lesscpu,在发生cpu抢占时,morecpu优先获得cpu资源

}

}

通过cgexec 指定命令调用某个cgroup。

cgexec -g cpu:lesscpu command

#命令行方式指定命令调用某个cgroup限制。

下面是内存限制的写法

cgroup lessmem{

memory{

memory.limit_in_bytes = 536870912;

#物理内存限制为512M字节,超出部分将写入到交换分区。

memory.memsw.limit_in_bytes = 536870912;

#物理内存+交换分区的总值限制为512M字节,结合前一条设置,结论是不使用交换分区

}

}

应用此cgroup的程序使用超过限制的内存时,进程将被kill

下面是磁盘I/O限制的写法

group lowio{

blkio{

blkio.weight=100;

#blkio.weight应用在基于cfq调度算法的磁盘,其他算法不支持

}

}

group highio{

blkio{

blkio.weight=200;

}

}

group ddio{

blkio{

blkio.throttle.read_bps_device="8:0 1000000";

#限制第一个scsi设备的读速率为1m(ll /dev/sda可以得出8:0类似编号)

}

}

cgroup的规则配置写入到 /etc/cgrules.conf,配置文件写法与limit.conf文件类似

user:program  controller  cgroup子系统

vim /etc/cgrules.conf

cat /etc/cgrules.conf

john:dd    blkio    ddio/

*:dd    blkio    ddio/

john:*    cpu    lesscpu/

配置完成后,通过service cgred restart 重新加载此配置文件

cgroup还可以冻结指定进程,配置写法如下

group stopit{

freezer{

}

}

#freezer不需要任何参数

echo pid > /cgroup/freezer/stopit/tasks

#将需要控制的进程号放到tasks中

echo FROZEN > /cgroup/freezer/stopit/freezer.state

#执行冻结操作,操作队tasks中的进程号生效

echo THAWED > /cgroup/freezer/stopit/freezer.state

#执行解冻操作0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值