分享: 今天我要分享一下我是如何限制小鸡资源占用滴

作案工具准备:

a. MacBook Pro一台
b. 安装好SecureCRT软件
c. 安装有大便11的小鸡一只

关键项:

a. 很多商家TOS或AUP中明确规定了CPU, IO, 连接会话数等阈值, 超过阈值会警告或杀鸡, 例如VirMach, SpartanHost, Naranjatech......
b. 陈旧的cpulimit工具只能限制单进程的CPU占用率
c. 非死不可的工程狮搞出来的Cgroups V2是个好帮手

具体步骤:

a. 开启内核cgroups v2特性支持
    $ vi /etc/default/grub
    在GRUB_CMDLINE_LINUX_DEFAULT参数中添加"cgroup_no_v1=all systemd.unified_cgroup_hierarchy=1"参数
    $ update-grub
    $ reboot
    重启后执行
    $ ls -alh /sys/fs/cgroup/
    目录中应该有system.slice和user.slice目录
    说明: system.slice存放systemd的service服务单元资源组,user.slice存放用户登录后手工运行程序的资源组,这些资源组都是内核自动创建的, 无需人工干预, 并且针对资源组应用的资源配额是有继承关系的, 例如针对system.slice限制CPU总体占用不超过50%, 则这50%的计算资源是所有下级资源组共享的, 一个服务占的多了另一个服务就会减少, 内核会保证本级和下级加起来的CPU占用率不超过操作系统CPU的50%

b. 限制CPU占用率
    1个CPU按100%计算, 2个CPU按200%计算.....
    例如在一个3核CPU小鸡上限制所有服务总体CPU占用率为50%则可以执行以下命令:
    $ systemctl set-property system.slice CPUQuota=150%
    剩下的计算资源可以给用户登录后手工运行的命令, 谁家小鸡还不允许个突发性能啊,
    $ systemctl set-property user.slice CPUQuota=100%
    根据商家TOS/AUP中的阈值调整上述命令并运行后你的小鸡再也不用担心CPU相关条款了(VirMach家的小鸡限制到一半CPU性能挖个矿啥的也不是不可以哈,,)

c. 限制磁盘IO带宽
    具体就不解释了, 如果弄清楚了步骤b那么这个步骤就直接敲命令吧
    例如: 所有系统服务磁盘IO读写带宽分别限制为50M/s
    $ systemctl set-property system.slice IOReadBandwidthMax='/dev/vda 50M' IOWriteBandwidthMax='/dev/vda 50M'
    例如: 所有用户登录后手工执行的程序磁盘IO读写带宽分别限制为50M/s
    $ systemctl set-property user.slice IOReadBandwidthMax='/dev/vda 50M' IOWriteBandwidthMax='/dev/vda 50M'

d. 限制磁盘IOPS
    $ systemctl set-property system.slice IOReadIOPSMax='/dev/vda 1000' IOWriteIOPSMax='/dev/vda 200'
    $ systemctl set-property user.slice IOReadIOPSMax='/dev/vda 1000' IOWriteIOPSMax='/dev/vda 200'

e. 限制连接会话数
    $ vi /etc/sysctl.conf
    添加
    net.netfilter.nf_conntrack_max = 最大连接会话数, 例如20000
    然后
    $ sysctl -p

f. 资源配额验证
    a. CPU配额可以随便跑个命令把CPU拉满然后用top命令直接看(此命令只对user.slice的配额验证生效, 因为命令时用户会话产生的进程),例如我度娘到的这个命令:
    $ for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
    $ top
    仔细瞅瞅结果吧,,,,,,,,,,,
    b. 磁盘IO配额可以直接用yabs.sh测试,例如:
    $ curl -sL yabs.sh | bash -s -- -i -g
    c. 连接会话数限制校验
    内核参数你都不信你还能干点儿啥啊!!!

g. 其它的事儿
    a. 显示cgroups资源组树形结构
    $ systemd-cgls
    b. 显示cgroups资源组资源占用情况
    $ systemd-cgtop

最后:感 谢 非死不可的工程狮,感谢Linux内核组,祝大家玩的开心啦!

来源:
hostloc:https://hostloc.com/space-uid-53498.html

发表新评论