1. 使用cgroup(控制组)限制进程占用内存方法 1:创建cgroup目录: 首先,需要在/sys/fs/cgroup/memory目录下创建一个子目录 sudo mkdir /sys/fs/cgroup/memory/myapp // sudo mkdir /sys/fs/cgroup/cpu/myapp,限制CPU方法 2:设置内存限制: sudo sh -c 'echo 50M > /sys/fs/cgroup/memory/myapp/memory.limit_in_bytesmemory.soft_limit_in_bytes' // 限制CPU方法:sudo sh -c 'echo 50000 > /sys/fs/cgroup/cpu/myapp/cpu.cfs_quota_us' // 限制CPU方法:sudo sh -c 'echo 100000 > /sys/fs/cgroup/cpu/myapp/cpu.rt_period_us' // 其中,cpu.cfs_quota_us表示CPU时间配额(单位为微秒),cpu.rt_period_us表示CPU周期(单位为微秒),这里将CPU时间配额设置为50000微秒,CPU时间周期设置为100000微秒,表示CPU使用率限制为50%。 3:添加进程到cgroup: echo >/sys/fs/cgroup/memory/myapp/cgroup.procs // 这一项限制各个资源处理方法都一样, 将pid写入cgroup.procs,则该pid所在的线程组及该pid的子进程等都会自动加入到cgroup中。将pid写入tasks,则只限制该pid。 4:禁用OOM: echo 1 >/sys/fs/cgroup/memory/myapp/memory.oom_control //默认当进程超过设置的内存上限后,会直接通过oom kill掉进程,这里通过禁用oom功能,让进程内存超限后不直接kill掉,而是一直等待可用内存,直到满足自身需求 2. 使用cgroup(控制组)限制进程磁盘I/O方法 1:创建cgroup目录: 首先,需要在/sys/fs/cgroup/blkio目录下创建一个子目录 sudo mkdir /sys/fs/cgroup/blkio/myapp 2:设置 I/O 限制: 限制设备的读取带宽(字节/秒) sudo sh -c 'echo 8:16 1048576' > /sys/fs/cgroup/blkio/myapp/blkio.throttle.read_bps_device //限制磁盘读取速度为:为1M/S 限制设备的写入带宽(字节/秒) sudo sh -c 'echo 8:16 1048576' > /sys/fs/cgroup/blkio/myapp/blkio.throttle.write_bps_device //限制磁盘写入速度为:为1M/S blkio.throttle.read_iops_device:限制设备的读取 IOPS(设备每秒钟可以执行的读/写请求数上限)//单位为 bios/second blkio.throttle.write_iops_device:限制设备的写入 IOPS(设备每秒钟可以执行的读/写请求数上限)//单位为 bios/second 3:添加进程到cgroup: echo >/sys/fs/cgroup/memory/myapp/cgroup.procs 3. 使用cgroup(控制组)限制网络带宽的方法 1:创建cgroup目录: 首先,需要在/sys/fs/cgroup/net_cls目录下创建一个子目录 mkdir /sys/fs/cgroup/net_cls mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls mkdir /sys/fs/cgroup/net_cls/0 2:设置 cgroup 的 classid,用于标识网络流量的类别: echo 0x100001 > /sys/fs/cgroup/net_cls/0/net_cls.classid 3:使用 tc 命令配置网络限制: 1> 建立队列: tc qdisc add dev eth0 root handle 10: htb 2> 配置分类: tc class add dev eth0 parent 10: classid 10:1 htb rate 40mbit 3> 添加过滤器: tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup 4:添加进程到cgroup: 手动写入进程ID:echo >/sys/fs/cgroup/memory/myapp/cgroup.procs //需要先通过ps -ef命令获取进程ID 自动写入进程ID:cgexec -g net_cls:myapp xxx这里是要执行的命令,会自动写入进程ID到cgroup.procs文件中 /* 将pid写入cgroup.procs,则该pid所在的线程组及该pid的子进程等都会自动加入到cgroup中 */ tc class change dev eth0 parent 10: classid 1:10 htb rate 91200Kbit ceil 91200Kbit //动态改变带宽 tc qdisc del dev eth0 root //删除qdisc和class配置 tc qdisc show dev eth0 //显示qdisc配置 tc class show dev eth0 //显示class配置 tc filter show/del dev eth0 //查看/删除过滤配置 /* 这里,eth0 是你想要限制网络流量的网络设备名称。htb(Hierarchical Token Bucket)是一种用于流量整形的算法,它允许你设置带宽限制。*/
标签:fs,限制,cgroup,echo,sys,myapp,资源 From: https://www.cnblogs.com/yixiaogo/p/18451344