centos7中进行资源限制,使用的仍然是cgroup,只是配置接口使用的systemd。
下文将介绍如何使用systemd进行资源限制。
Step1 编写unit文件
命令为my-demo.service
整个文件如下:
[Unit]
Description=My-demo Service
[Service]
Type=simple
User=orange
ExecStart=/bin/bash /home/orange/test.sh
MemoryAccounting=true
MemoryLimit=200M
[Install]
WantedBy=multi-user.target
关于Type的定义
- simple 默认类型,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切都退出。
- forking 标准Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,父进程退出,留下变成Deamon精灵的子进程。
- oneshot 表示服务类型就是启动,执行完成后,没进程存在。
User字段表示指定用户启动程序。
- MemoryLimit字段表示限制服务的物理内存占用,如果超过会被系统自动Kill。
另外,test.sh的脚本定义如下,作用是耗内存:
#!/bin/bash
tmp="a"
while [ True ]
do
tmp=$tmp$tmp
done
Step2 将上述的文件拷贝到/usr/lib/systemd/system/目录下
# cp my-demo.service /usr/lib/systemd/system/
Step4 配置开机启动
# systemctl enable my-demo.service
ln -s'/usr/lib/systemd/system/my-demo.service' '/etc/systemd/system/multi-user.target.wants/my-demo.service'
输出表明,注册的过程实际上就是将服务链接到/etc/systemd/system/目录下。
Step5 测试
启动服务
# systemctl start my-demo.service
查看服务是否已经启动
# systemctl status my-demo.service
查看进程占用内存
# top
可以看到内存占用在上升,大约不到1分钟,就会看到进程由于内存超出限制而被Kill。
可以在/var/log/message中看到被Kill的记录。
参考
https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/150.html