日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你可能不知道的Docker资源限制

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你可能不知道的Docker资源限制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


本篇內容涉及Docker的內存與CPU限制,可以用于在實際開發中為指定容器設置限制最大使用的資源量,預計閱讀時間為5分鐘


01

What is 資源限制?


默認情況下,容器是沒有資源限制的,它會盡可能地使用宿主機能夠分配給它的資源。Docker提供了一種控制分配多少量的內存、CPU或阻塞I/O給一個容器的方式,即通過在docker run或docker create命令時設置運行時配置的標志

其中許多功能都要求您的內核支持Linux功能,可以通過docker info命令來檢查是否支持,如果內核中禁用了某項功能,那你可能會在下邊收到一條Warning。


02

關于OOME


在Linux主機上,如果內核檢測到沒有足夠的內存來執行重要的系統功能,它會拋出一個OOME 或者 Out Of Memory Exception,一旦發生OOME,Linux就會開始查殺進程以釋放內存。任何進程都有可能會被殺死,包括docker daemon和其他重要的應用程序。如果錯誤的進程被殺死,這可會降低整個系統的使用效果。


03

限制Docker使用內存


在Docker中可以強行限制容器的資源使用的限制,即只允許容器使用不超過給定數量的系統內存或其他軟限制。

下面介紹幾個最常用的選項,我們可以在docker run或docker create創建容器時指定,用以限制容器的資源使用限制。

選項

描述

-m 或 -memory=

容器可以使用的最大內存量。如果你設置了此選項,那么允許的最小值為4m(4MB)。

--memory-swap

允許此容器交換到磁盤的內存量。

--kernel-memory

容器可以使用的最大內核內存量,允許的最小值是4m(4MB)。由于內核內存無法換出,因此內核內存不足的容器可能會阻塞主機資源,這可能會對主機和其他容器產生副作用。


04

限制Docker使用CPU


默認情況下,每個容器對主機CPU周期的訪問權限是不受限制的。我們可以設置各種約束來限制給定容器訪問主機的CPU周期。大多數用戶使用和配置CFS調度程序(默認)或實時調度程序。

下面介紹幾個常用的選項,用于配置默認的CFS調度程序,以限制容器對于CPU的使用。

選項

描述

--cpus=<value>

指定容器可以使用的可用CPU資源量,例如宿主機有4個CPU,那你可以給容器設置--cpus="3.5",則限制容器最多使用3.5個CPU。

--cpuset-cpus

限制容器可以使用的特定CPU或核心,例如宿主機有4個CPU,那你可以給容器設置--cpuset-cpus="1,3",則限制容器只能使用第2個和第4個CPU。



05

驗證Docker資源限制


(1)查看宿主機的資源信息

lscpu

free -h

可以看出,我是個窮逼,只買得起這個配置的云服務器(個人用)

(2)拉取用于壓測的鏡像

docker pull lorel/docker-stress-ng

更多關于docker-stress-ng鏡像的說明請參考docker hub上的官方文檔:https://hub.docker.com/r/lorel/docker-stress-ng/

(3)如果想要查看docker-stress-ng的用法,可以使用以下命令借助--help來獲取選項的含義

docker run --name stress --rm lorel/docker-stress-ng:latest stress --help

在幫助文檔中,給出了一個Example:

stress-ng --cpu 8 --io 4 --vm 2 --vm-bytes 128M --fork 4 --timeout 10s

下面是它的重要選項的說明:

(4)測試內存使用限制

docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress --vm 2

說明:

驗證:

docker stats stress

可以看到,無論啟動多少個使用256M的進程做壓測(這里啟動了2個進程,按理會使用512MB內存),stress容器的最大內存使用量始終維持在256MB。

(5)測試CPU使用限制

docker run --name stress --rm --cpus 1 lorel/docker-stress-ng:latest stress --cpu 4

這里由于我的宿主機只有2個CPU,因此這里限制stress容器只能使用最多1個CPU,但是壓測進程可以使用4個CPU。

驗證:

docker stats stress

可以看到,無論壓測的進程被允許使用多少個CPU,stress的CPU使用量始終在100%左右(存在一定誤差是正常的)。

那么,如果我們不限制CPU呢?

docker run --name stress --rm lorel/docker-stress-ng:latest stress --cpu 4

從上圖可知,stress容器會盡可能地吃掉盡可能多的CPU資源,由于宿主機只有2個CPU,因此原則上不會使用超過200%的CPU(當然,也會存在一定的誤差,正常的)



06

小結


本文探索了Docker的資源限制相關知識,在日常開發中應該給容器設置一個合理的資源限制值,以防出現OOME的情況導致Linux殺掉錯誤的進程。


參考資料:

(1)馬哥,《Docker資源限制及驗證》

(2)阿龍,《Docker的系統資源限制詳解



恰童鞋騷年,風華不再正茂,仍想揮斥方遒


點個在看少個bug??



總結

以上是生活随笔為你收集整理的你可能不知道的Docker资源限制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。