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