欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker之限制容器的資源使用過程

 更新時(shí)間:2024年07月04日 11:44:55   作者:小李學(xué)不完  
這篇文章主要介紹了Docker之限制容器的資源使用過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、容器所用內(nèi)存資源的限制

容器可使用的內(nèi)存:物理內(nèi)存和交換空間(Swap)。

1.1、用戶內(nèi)存限制

Docker默認(rèn)沒有設(shè)置內(nèi)存限制。

可以通過相關(guān)選項(xiàng)限制設(shè)置:

  • -m(--memory):設(shè)置容器可用的最大內(nèi)存。該值最低為4MB。
  • --memory-swap:允許容器置入磁盤交換空間中的內(nèi)存大小。

Docker提供4種方式設(shè)置容器的用戶內(nèi)存使用:

  • 對(duì)容器內(nèi)存使用無限制(兩個(gè)選項(xiàng)都不使用)。
  • 設(shè)置內(nèi)存限制并取消交換空間內(nèi)存限制。
 #使用300內(nèi)存和盡可能多的交換空間
 docker run -it -m 300M --memory-swap -1 ubuntu /bin/bash
  • 只設(shè)置內(nèi)存限制。
 # 300MB的內(nèi)存和300MB的交換空間(默認(rèn)情況下虛擬內(nèi)存總量將設(shè)置為內(nèi)存大小的兩倍,因此容器能使用300M的交換空間
 docker run –it -m 300M ubuntu /bin/bash
  • 同時(shí)設(shè)置內(nèi)存和交換空間
 # 300MB的內(nèi)存和700MB的交換空間
 docker run –it –m 300M --memory-swap 1G ubuntu/bin/bash

1.2、內(nèi)核內(nèi)存限制

內(nèi)核內(nèi)存不能交換到磁盤中,無法使用交換空間,消耗過多可能導(dǎo)致其阻塞系統(tǒng)服務(wù)。

 # 在500MB的內(nèi)存中,可以使用最高50MB的內(nèi)核內(nèi)存
 docker run –it -m 500M --kemel-memory 50M ubuntu /bin/bash
 ?
 # 只可以使用50MB的內(nèi)核內(nèi)存
 docker run –it --kernel-memory 50M ubuntu /bin/bash

1.3、設(shè)置內(nèi)存預(yù)留實(shí)現(xiàn)軟限制

使用--memory-reservation選項(xiàng)設(shè)置內(nèi)存預(yù)留。

它是一種內(nèi)存軟限制,允許更多的內(nèi)存共享。設(shè)置后,Docker將檢測(cè)內(nèi)存爭(zhēng)用或內(nèi)存不足,并強(qiáng)制容器將其內(nèi)存消耗限制為預(yù)留值。

內(nèi)存預(yù)留值應(yīng)當(dāng)始終低于硬限制。作為一個(gè)軟限制功能,內(nèi)存預(yù)留并不能保證不會(huì)超過限制。

 # 限制內(nèi)存為500MB,內(nèi)存預(yù)留值(軟限制)為200MB。
 # 當(dāng)容器消耗內(nèi)存大于200MB、小于500MB時(shí),下一次系統(tǒng)內(nèi)存回收將嘗試將容器內(nèi)存縮減到200MB以下。
 docker run –it –m 500M --memory-reservation 200M ubuntu /bin/bash
 ?
 # 設(shè)置內(nèi)存軟限制為1GB
 docker run –it —-memory-reservation 1G ubuntu /bin/bash

二、容器所用CPU資源的限制

默認(rèn)情況為所有容器可以平等地使用主機(jī)CPU資源并且不受限制。

2.1、CPU份額限制

-c(--cpu-shares)選項(xiàng)將CPU份額權(quán)重設(shè)置為指定的值。

默認(rèn)值為1024,如果設(shè)置為0,系統(tǒng)將忽略該值并使用默認(rèn)值1024。

2.2、CPU周期限制

--cpu-period選項(xiàng)(以μs為單位)設(shè)置CPU周期以限制容器CPU 資源的使用。

默認(rèn)的CFS(完全公平調(diào)度器)周期為100ms(100000μs)。

通常將--cpu-period與--cpu-quota這兩個(gè)選項(xiàng)配合使用:

 # 如果只有1個(gè)CPU,則容器可以每50ms(50000μs)獲得50%(25000/50000)的CPU運(yùn)行時(shí)間。
 docker run -it --cpu-period=50000 -~cpu-quota=25000 ubuntu /bin/bash

可用--cpus選項(xiàng)指定容器的可用 CPU 資源來達(dá)到同樣的目的。

--cpus 選項(xiàng)值是一個(gè)浮點(diǎn)數(shù),默認(rèn)值為 0.000,表示不受限制。

 # 上述可改為
 docker run -it --cpus=0.5 ubuntu /bin/bash

--cpu-period和--cpu-quota選項(xiàng)都是以1個(gè)CPU為基準(zhǔn)。

2.3、CPU放置限制

--cpuset-cpus選項(xiàng)限制容器進(jìn)程在指定的CPU上執(zhí)行。

# 容器中的進(jìn)程可以在cpu1和cpu3上執(zhí)行
 docker run -it--cpuset-cpus="1, 3" ubuntu:14.04 /bin/bash
 ?
 # 容器中的進(jìn)程可以在cpu0、cpu1和cpu 2上執(zhí)行
 docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash

2.4、CPU配額限制

--cpu-quota選項(xiàng)限制容器的CPU配額,默認(rèn)值為0表示容器占用 100%的CPU資源個(gè)CPU)。

CFS用于處理進(jìn)程執(zhí)行的資源分配,是由內(nèi)核使用的默認(rèn) Linux 調(diào)度程序。

將此值設(shè)置50000意味著限制容器至多使用CPU資源的50%。對(duì)于多個(gè)CPU而言,調(diào)整--cpu-quota選項(xiàng)必要的。

三、容器所用塊I/O帶寬的限制

塊I/O帶寬(Block I/O Bandwidth,Blkio)是另一種可以限制容器使用的資源。

塊I/O指磁盤的寫,Docker可通過設(shè)置權(quán)重、限制每秒字節(jié)數(shù)(B/s)和每秒I/O次數(shù)(IO/s)的方式控制容器讀寫盤的帶寬。

3.1、設(shè)置塊I/O權(quán)重

--blkio-weight選項(xiàng)更改比例(原默認(rèn)為500),設(shè)置相對(duì)于所有其他正在運(yùn)行的容器的塊 I/O 帶寬權(quán)重。

# 創(chuàng)建兩個(gè)有不同塊 I/O 帶寬權(quán)重的容器。
docker run –it --name c1 --blkio-weight 300 ubuntu /bin/bash
docker run -it --name c2 --blkio-weight 600 ubuntu /bin/bash

3.2、限制設(shè)備讀寫速率

Docker 根據(jù)兩類指標(biāo)限制容器的設(shè)備讀寫速率:一類是每秒字節(jié)數(shù),另一類是每秒I/O次數(shù)。

  • 限制每秒字節(jié)數(shù)

--device-read-bps選項(xiàng)限制指定設(shè)備的讀取速率,即每秒讀取的字節(jié)數(shù)。

# 創(chuàng)建一個(gè)容器,并限制對(duì)/dev/sda設(shè)備的讀取速率為每秒1MB
docker run -it --device-read-bps /dev/sda:1mb ubuntu

類似地,可使用--device-write-bps選項(xiàng)限制指定設(shè)備的寫入速率

格式:

<設(shè)備>:<速率值>[單位]

  • 限制每秒I/O次數(shù)

--device-read-iops--device-write-iops選項(xiàng)制指定設(shè)備的讀取和寫入速率,用每秒I/O次數(shù)表示。

# 創(chuàng)建一個(gè)容器,限制它對(duì)1devsd3設(shè)備的讀取速率為每秒1000次。
docker run -it --device-read-iops /dev/sda:1000 ubuntu

四、資源限制的實(shí)現(xiàn)機(jī)制

對(duì)容器使用的內(nèi)存、CPU和塊I/O帶寬資源的限制具體是由控制組(Cgroup)的相應(yīng)子系統(tǒng)來實(shí)現(xiàn)的

  • memory子系統(tǒng)設(shè)置控制組中的住務(wù)所使用的內(nèi)存限制;
  • cpu子系統(tǒng)通過調(diào)度程序提供對(duì)CPU的控制組任務(wù)的訪問;
  • blkio子系統(tǒng)為塊設(shè)備(如磁盤、固態(tài)硬盤、USB等)設(shè)置輸入和輸出限制。

在docker run命令中使用--cpu-shares、--memory、--device-read-bps等選項(xiàng)實(shí)際上就是在配置控制組,相關(guān)的配置文件保存在/sys/fs/cgroup目錄中。

五、示例

5.1、驗(yàn)證分析容器資源限制的實(shí)現(xiàn)機(jī)制

  • 啟動(dòng)一個(gè)容器,設(shè)置內(nèi)存限額為300MB,CPU權(quán)重為512。
[root@docker ~]# docker run --rm -d -p 8080:80 -m 300M --cpu-shares=512 httpd
b8a03a3887f1f...
  • 查看/sys/fs/cgroup/cpu/docker目錄,發(fā)現(xiàn)Linux為每個(gè)正在運(yùn)行的容器創(chuàng)建一個(gè)Cgroup目錄,以容器ID命名:
[root@docker ~]# ls -l /sys/fs/cgroup/cpu/docker/
total 0
drwxr-xr-x 2 root root 0 Apr 29 13:08 b8a03a3887f1f...
...
  • 進(jìn)一步查看容器子目錄,會(huì)發(fā)現(xiàn)每個(gè)容器的子目錄中都包含所有與CPU相關(guān)的Cgroup配置:
[root@docker ~]# ls -l /sys/fs/cgroup/cpu/docker/b8a03a3887f1f...
total 0
...
-rw-r--r-- 1 root root 0 Apr 29 13:12 cpu.rt_runtime_us
-rw-r--r-- 1 root root 0 Apr 29 13:08 cpu.shares
...
  • 查看其中cpu.shares文件的內(nèi)容,發(fā)現(xiàn)它保存的就是--cpu-shares選項(xiàng)的配置(512):
[root@docker-2322030238 ~]# cat /sys/fs/cgroup/cpu/docker/b8a03a3887f1f.../cpu.shares 
512
  • 類似,查看/sys/fs/cgroup/memory/docker目錄中的內(nèi)存Cgroup配置,發(fā)現(xiàn)memory.limit_in_bytes文件保存的就是-m選項(xiàng)的配置,本例設(shè)300MB,用字節(jié)表示為314572800:
[root@docker ~]# cat /sys/fs/cgroup/memory/docker/b8a03a3887f1f.../memory.limit_in_bytes 
314572800

5.2、動(dòng)態(tài)更改容器的資源限制

docker update命令可以動(dòng)態(tài)地更新容器配置,其語法:

docker update [選項(xiàng)] 容器 [容器...]

啟動(dòng)一個(gè)限制資源的容器后,再修改其資源限制:

[root@docker ~]# docker run --rm -d -p 8080:80 -m 300M --cpu-shares=512 httpd
29d3cb1392b8e...
[root@docker ~]# docker update -m 500M --cpu-shares=10245 29d3
29d3

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker 徹底刪除私有庫鏡像的操作

    Docker 徹底刪除私有庫鏡像的操作

    這篇文章主要介紹了Docker 徹底刪除私有庫鏡像的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker掛載目錄失敗問題解決方法

    Docker掛載目錄失敗問題解決方法

    在使用Docker時(shí),可能會(huì)遇到掛載目錄失敗的問題,這通常是由于路徑錯(cuò)誤或權(quán)限問題導(dǎo)致,解決這一問題的方法包括檢查掛載路徑、使用正確的交互路徑、避免掛載宿主機(jī)的非空目錄等,需要的朋友可以參考下
    2024-10-10
  • docker常用命令總結(jié)之安裝、鏡像、容器基本操作

    docker常用命令總結(jié)之安裝、鏡像、容器基本操作

    這篇文章主要介紹了docker常用命令總結(jié)之安裝、鏡像、容器基本操作,需要的朋友可以參考下
    2017-05-05
  • Docker中忽略文件的實(shí)現(xiàn)

    Docker中忽略文件的實(shí)現(xiàn)

    Docker忽略文件是指在Docker鏡像構(gòu)建過程中,用于忽略指定文件或目錄的一種機(jī)制,本文主要介紹了Docker中忽略文件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • idea配置docker插件的方法步驟(圖文)

    idea配置docker插件的方法步驟(圖文)

    本文主要介紹了idea配置docker插件的方法步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Docker部署Kafka以及Spring Kafka實(shí)現(xiàn)

    Docker部署Kafka以及Spring Kafka實(shí)現(xiàn)

    這篇文章主要介紹了Docker部署Kafka以及Spring Kafka實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Docker的鏡像制作與整套項(xiàng)目一鍵打包部署的實(shí)現(xiàn)

    Docker的鏡像制作與整套項(xiàng)目一鍵打包部署的實(shí)現(xiàn)

    這篇文章主要介紹了Docker的鏡像制作與整套項(xiàng)目一鍵打包部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Docker部署Ragflow(完美解決502 bad gateway)

    Docker部署Ragflow(完美解決502 bad gateway)

    本文主要介紹了Docker部署Ragflow,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 使用Docker多階段構(gòu)建來減小鏡像大小的方法

    使用Docker多階段構(gòu)建來減小鏡像大小的方法

    這篇文章主要介紹了使用Docker多階段構(gòu)建來減小鏡像大小的方法,適用于需要在 Dockerfile 中構(gòu)建程式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Docker 的健康檢測(cè)機(jī)制

    Docker 的健康檢測(cè)機(jī)制

    這篇文章主要介紹了Docker 的健康檢測(cè)機(jī)制。即檢驗(yàn)進(jìn)程是否存活,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12

最新評(píng)論