centos7 使用cgroup進行資源限制

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

https://blog.csdn.net/fu_wayne/article/details/38018825

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章