亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python3+cgroupspy安裝使用簡介

 更新時間:2023年04月28日 10:16:30   作者:阿風小子  
cgroups是Control groups的簡稱,是Linux內(nèi)核提供的一種限制進程使用和種系統(tǒng)資源的特性,這篇文章主要介紹了Python3+cgroupspy安裝使用教程,需要的朋友可以參考下

一、系統(tǒng)資源使用限制的必要性探討

對于一個腳本,最基礎(chǔ)的限制是要限制單進程實例以保證了不會存在多個進程實例、在運行程序主體邏輯前檢測系統(tǒng)資源剩余量確保自己不是壓夸系統(tǒng)的最后一根稻草、設(shè)置程序運行超時時間以保證進程實例不會無休止地運行下去。

進一步,在部署有可用性要求較高的服務的主機中,我們還需要關(guān)注腳本運行期間占用的系統(tǒng)資源的問題,我們需要一種途徑限制腳本對cpu、內(nèi)存、io等系統(tǒng)資源的用量,以防止腳本對這些關(guān)鍵服務造成影響。

二、cgroups簡介

2.1背影簡介

cgroups是Control groups的簡稱,是Linux內(nèi)核提供的一種限制進程使用和種系統(tǒng)資源的特性。

最早的cgroups來自于谷歌工程師Paul Menage和Rohit Seth開發(fā)的“處理容器”特性,他們的工作在2008年布的Linux2.6.24版本被集成,此亦即所謂的cgroupsV1版本。

在此之后各種不同的特性被添加到cgroups之上,在豐富cgroups功能的同時,也使其出現(xiàn)復雜化和不一致的問題?;诖嗽?,Tejun Heo對cgroups進行了重寫此即cgroupsV2,在Linux 3.10開始被集成在Linux 4.5正式發(fā)布。

在預期上V2是V1的替代,但為了兼容兩者可以同時存在。在后邊的介紹中沒有特別說明指的都是cgroupsV2。

2.2使用簡介

在表現(xiàn)形式上,cgroups是一個文件系統(tǒng),通常是掛載在/sys/fs/cgroup目錄下,可以使用df -h直接查看

該目錄下的每一個子文件夾就代表一種資源,要限制該項資源就在相應的文件夾下進行配置。

比如限制cpu就在cpu,cpuacct文件夾下進行配置、限制io就在blkio文件夾下進行配置、限制內(nèi)存就在memory文件夾下進行配置。

在文件夾下的每個文件就是該項資源的一個指標,對各指標進行配置,最后在tasks中寫入想要限制的目標進程的pid,linux內(nèi)核即會按配置對這個進程進行限制。

但我們可能會想對不同的進程進行不同的限制,這是一個普遍的需求。所以我們一般不直接修改各資源文件夾下的文件,而是在資源文件夾下為我們的目標進程單獨創(chuàng)建一個文件夾,但使用mkdir創(chuàng)建文件夾時系統(tǒng)會自動在該文件夾下生成各資源指標的配置文件。而要刪除時,直接使用rmdir刪除文件夾即可。

2.3配置實現(xiàn)示例

示例一,限制pid為1234的進程最多只能使用一個核的90%算力。

pid_num=1234
cgroup_base_dir="/sys/fs/cgroup"
resource_dir="cpu,cpuacct"
self_define_dir="test_process"
target_path="${cgroup_base_dir}/${resource_dir}/${self_define_dir}"
# 先在cpu配置文件夾下再單獨創(chuàng)建一個文件夾
mkdir ${target_path}
# 設(shè)置時段長度,單位微秒。這里設(shè)置成1000000微秒,即1秒
echo 1000000 > ${target_path}/cpu.cfs_period_us
# 設(shè)置在該時間段內(nèi)最多能使用的時間,單位微秒。這里設(shè)置成900000,即0.9秒。
# 當cpu.cfs_quota_us比cpu.cfs_period_us大時表示可以使用多個cpu核
echo 900000 > ${target_path}/cpu.cfs_quota_us
# 對進程進行限制
echo ${pid_num} >> ${target_path}/tasks

示例二,限制pid為1234的進程對設(shè)備號為252:0的磁盤的讀寫速度最高都只能為5M

pid_num=1234
# 這里設(shè)備號是給定的,可使用lsblk查看自己磁盤的設(shè)備號
device_num=252:0
limit_read_rate=5242880
limit_write_rate=5242880
cgroup_base_dir="/sys/fs/cgroup"
resource_dir="blkio"
self_define_dir="test_process"
target_path="${cgroup_base_dir}/${resource_dir}/${self_define_dir}"
# 先在cpu配置文件夾下再單獨創(chuàng)建一個文件夾
mkdir ${target_path}
# 限制讀速度,單位B每秒。
echo "${device_num} ${limit_read_rate}" > ${target_path}/blkio.throttle.read_bps_device
# 限制寫速度,單位B每秒。
echo "${device_num} ${limit_write_rate}" > ${target_path}/blkio.throttle.write_bps_device
# 對進程進行限制
echo ${pid_num} >> ${target_path}/tasks

示例三,限制pid為1234的進程最多只能使用1G的內(nèi)存

pid_num=1234
limit_memory_byte=1024000000
cgroup_base_dir="/sys/fs/cgroup"
resource_dir="memory"
self_define_dir="test_process"
target_path="${cgroup_base_dir}/${resource_dir}/${self_define_dir}"
# 先在cpu配置文件夾下再單獨創(chuàng)建一個文件夾
mkdir ${target_path}
# 限制內(nèi)存用量大小,單位B。
echo ${limit_memory_byte} > ${target_path}/memory.limit_in_bytes
# 對進程進行限制
echo ${pid_num} >> ${target_path}/tasks

2.4關(guān)于配置的一些說明

所有配置項,如果有多條配置,那么使用換行進行分隔;包括tasks的進程pid也一樣。

cgroups的配置有一定的主動排錯功能,如果配置錯誤會拒絕寫入。比如上邊限制磁盤讀寫速率的配置中,如果你不存在設(shè)備號為252:0的設(shè)備那么配置寫入會失敗。

cgroups的進程限制有一定的自適應功能。比如你限制了一個進程那么其子進程也會被自動加入到tasks中一起限制,如果一個進程結(jié)束那么其pid會被自動移出tasks。

三、cgroupspy安裝使用

如果考慮不受拘束我們可以按第二大節(jié)所說自己實現(xiàn)資源限制,但如果考慮簡單性和健壯性可以直接使用別人寫好的庫;cgroupspy是cgroups配置的python實現(xiàn)。

項目主頁:https://github.com/cloudsigma/cgroupspy

3.1安裝

直接pip安裝即可:

pip install cgroupspy

3.2使用示例(以限制內(nèi)存為例)

from cgroupspy import trees
pid_num = 1234
resource_item = "memory"
group_name = "test_process"
limit_memory_byte = 1024000000
# 實例化一個資源樹
t = trees.Tree()
# 獲取內(nèi)存配置對象
memory_limit_obj = t .get_node_by_path("/{0}/".format(resource_item))
# 創(chuàng)建一個test_process組(在實際上,即文件夾)
test_process_group = memory_limit_obj.create_cgroup(group_name)
# 限制內(nèi)存用量。相對于實際的文件少了memory前輟
test_process_group.controller.limit_in_bytes = limit_memory_byte
# 限制進程
test_process_group.controller.tasks = pid_num

參考:

https://en.wikipedia.org/wiki/Cgroups 

https://man7.org/linux/man-pages/man7/cgroups.7.html

到此這篇關(guān)于Python3+cgroupspy安裝使用教程的文章就介紹到這了,更多相關(guān)Python3 cgroupspy安裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python實現(xiàn)一個春節(jié)倒計時腳本

    基于Python實現(xiàn)一個春節(jié)倒計時腳本

    春節(jié)即將到來,本文將為大家介紹一個通過Python實現(xiàn)的春節(jié)倒計時腳本,文中的示例代碼簡潔易懂,感興趣的小伙伴可以自己動手嘗試一下
    2022-01-01
  • 分享Python文本生成二維碼實例

    分享Python文本生成二維碼實例

    這篇文章主要介紹了Python文本生成二維碼實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • TensorFlow實現(xiàn)checkpoint文件轉(zhuǎn)換為pb文件

    TensorFlow實現(xiàn)checkpoint文件轉(zhuǎn)換為pb文件

    今天小編就為大家分享一篇TensorFlow實現(xiàn)checkpoint文件轉(zhuǎn)換為pb文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn)

    pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn)

    這篇文章主要介紹了pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • python中的json模塊常用方法匯總

    python中的json模塊常用方法匯總

    這篇文章主要介紹了python中的json模塊常用方法匯總,json模塊可以實現(xiàn)json數(shù)據(jù)的序列化和反序列化,更多相關(guān)資料介紹需要的小伙伴可以參考一下下面文章內(nèi)容
    2022-06-06
  • TensorFlow的權(quán)值更新方法

    TensorFlow的權(quán)值更新方法

    今天小編就為大家分享一篇TensorFlow的權(quán)值更新方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • django靜態(tài)文件加載的方法

    django靜態(tài)文件加載的方法

    本篇文章主要介紹了django靜態(tài)文件加載的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • python實現(xiàn)隨機密碼字典生成器示例

    python實現(xiàn)隨機密碼字典生成器示例

    這篇文章主要介紹了python實現(xiàn)隨機密碼字典生成器示例,需要的朋友可以參考下
    2014-04-04
  • Python+PyQt5來實現(xiàn)文件高速查找

    Python+PyQt5來實現(xiàn)文件高速查找

    這篇文章主要為大家詳細介紹了如何模擬Everything,即通過python+PyQt5來實現(xiàn)可視化文件的高速查找,文中的示例代碼講解詳細,需要的可以參考一下
    2023-07-07
  • CentOS 6.5中安裝Python 3.6.2的方法步驟

    CentOS 6.5中安裝Python 3.6.2的方法步驟

    centos 6.5默認自帶的python版本為2.6,而下面這篇文章主要給大家介紹了關(guān)于在CentOS 6.5中安裝Python 3.6.2的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12

最新評論