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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

centos中bash占用cpu_Docker 多种维度限制容器可用的 CPU

發(fā)布時間:2025/3/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 centos中bash占用cpu_Docker 多种维度限制容器可用的 CPU 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:http://t.cn/EfDPgJi

默認(rèn)情況下容器可以使用的主機(jī) CPU 資源是不受限制的。和內(nèi)存資源的使用一樣,如果不對容器可以使用的 CPU 資源進(jìn)行限制,一旦發(fā)生容器內(nèi)程序異常使用 CPU 的情況,很可能把整個主機(jī)的 CPU 資源耗盡,從而導(dǎo)致更大的災(zāi)難。本文將介紹如何限制容器可以使用的 CPU 資源。本文的 demo 中會繼續(xù)使用《Docker: 限制容器可用的內(nèi)存》一文中創(chuàng)建的 docker 鏡像 u-stress 進(jìn)行壓力測試,文中就不再過多的解釋了。

限制可用的 CPU 個數(shù)

在 docker 1.13 及更高的版本上,能夠很容易的限制容器可以使用的主機(jī) CPU 個數(shù)。只需要通過 --cpus 選項(xiàng)指定容器可以使用的 CPU 個數(shù)就可以了,并且還可以指定如 1.5 之類的小數(shù)。接下來我們在一臺有四個 CPU 且負(fù)載很低的主機(jī)上進(jìn)行 demo 演示:

通過下面的命令創(chuàng)建容器,--cpus=2 表示容器最多可以使用主機(jī)上兩個 CPU:

$ docker run -it --rm --cpus=2 u-stress:latest /bin/bash

然后由 stress 命令創(chuàng)建四個繁忙的進(jìn)程消耗 CPU 資源:

# stress -c 4

我們先來看看 docker stats 命令的輸出:

容器 CPU 的負(fù)載為 200%,它的含義為單個 CPU 負(fù)載的兩倍。我們也可以把它理解為有兩顆 CPU 在 100% 的為它工作。再讓我們通過 top 命令看看主機(jī) CPU 的真實(shí)負(fù)載情況:

哈哈,有點(diǎn)大跌眼鏡!實(shí)際的情況并不是兩個 CPU 負(fù)載 100%,而另外兩個負(fù)載 0%。四個 CPU 的負(fù)載都是 50%,加起來容器消耗的 CPU 總量就是兩個 CPU 100% 的負(fù)載。

看來對于進(jìn)程來說是沒有 CPU 個數(shù)這一概念的,內(nèi)核只能通過進(jìn)程消耗的 CPU 時間片來統(tǒng)計(jì)出進(jìn)程占用 CPU 的百分比。這也是我們看到的各種工具中都使用百分比來說明 CPU 使用率的原因。嚴(yán)謹(jǐn)起見,我們看看 docker 的官方文檔中是如何解釋 --cpus 選項(xiàng)的:Specify how much of the available CPU resources a container can use.果然,人家用的是 "how much",不可數(shù)的!并且 --cpus 選項(xiàng)支持設(shè)為小數(shù)也從側(cè)面說明了對 CPU 的計(jì)量只能是百分比。看來筆者在本文中寫的 "CPU 個數(shù)" 都是不準(zhǔn)確的。既然不準(zhǔn)確,為什么還要用?當(dāng)然是為了容易理解。況且筆者認(rèn)為在 --cpus 選項(xiàng)的上下文中理解為 "CPU 個數(shù)" 并沒有問題(有興趣的同學(xué)可以讀讀?--cpus 選項(xiàng)的由來,人家的初衷也是要表示 CPU 個數(shù)的)。

雖然 --cpus 選項(xiàng)用起來很爽,但它畢竟是 1.13 才開始支持的。對于更早的版本完成同樣的功能我們需要配合使用兩個選項(xiàng):--cpu-period 和 --cpu-quota(1.13 及之后的版本仍然支持這兩個選項(xiàng))。下面的命令實(shí)現(xiàn)相同的結(jié)果:

$ docker run -it --rm --cpu-period=100000 --cpu-quota=200000 u-stress:latest /bin/bash

這樣的配置選項(xiàng)是不是讓人很傻眼呀!100000 是什么?200000 又是什么? 它們的單位是微秒,100000 表示 100 毫秒,200000 表示 200 毫秒。它們在這里的含義是:在每 100 毫秒的時間里,運(yùn)行進(jìn)程使用的 CPU 時間最多為 200 毫秒(需要兩個 CPU 各執(zhí)行 100 毫秒)。要想徹底搞明白這兩個選項(xiàng)的同學(xué)可以參考:CFS BandWith Control。我們要知道這兩個選項(xiàng)才是事實(shí)的真相,但是真相往往很殘忍!還好 --cpus 選項(xiàng)成功的解救了我們,其實(shí)它就是包裝了 --cpu-period 和 --cpu-quota。

指定固定的 CPU

通過 --cpus 選項(xiàng)我們無法讓容器始終在一個或某幾個 CPU 上運(yùn)行,但是通過 --cpuset-cpus 選項(xiàng)卻可以做到!這是非常有意義的,因?yàn)楝F(xiàn)在的多核系統(tǒng)中每個核心都有自己的緩存,如果頻繁的調(diào)度進(jìn)程在不同的核心上執(zhí)行勢必會帶來緩存失效等開銷。下面我們就演示如何設(shè)置容器使用固定的 CPU,下面的命令為容器設(shè)置了 --cpuset-cpus 選項(xiàng),指定運(yùn)行容器的 CPU 編號為 1:

$ docker run -it --rm --cpuset-cpus="1" u-stress:latest /bin/bash

再啟動壓力測試命令:

# stress -c 4

然后查看主機(jī) CPU 的負(fù)載情況:

這次只有 Cpu1 達(dá)到了 100%,其它的 CPU 并未被容器使用。我們還可以反復(fù)的執(zhí)行 stress -c 4 命令,但是始終都是 Cpu1 在干活。再看看容器的 CPU 負(fù)載,也是只有 100%:

--cpuset-cpus 選項(xiàng)還可以一次指定多個 CPU:

$ docker run -it --rm --cpuset-cpus="1,3" u-stress:latest /bin/bash

這次我們指定了 1,3 兩個 CPU,運(yùn)行 stress -c 4 命令,然后檢查主機(jī)的 CPU 負(fù)載:

Cpu1 和 Cpu3 的負(fù)載都達(dá)到了 100%。容器的 CPU 負(fù)載也達(dá)到了 200%:

--cpuset-cpus 選項(xiàng)的一個缺點(diǎn)是必須指定 CPU 在操作系統(tǒng)中的編號,這對于動態(tài)調(diào)度的環(huán)境(無法預(yù)測容器會在哪些主機(jī)上運(yùn)行,只能通過程序動態(tài)的檢測系統(tǒng)中的 CPU 編號,并生成 docker run 命令)會帶來一些不便。

設(shè)置使用 CPU 的權(quán)重

當(dāng) CPU 資源充足時,設(shè)置 CPU 的權(quán)重是沒有意義的。只有在容器爭用 CPU 資源的情況下, CPU 的權(quán)重才能讓不同的容器分到不同的 CPU 用量。--cpu-shares 選項(xiàng)用來設(shè)置 CPU 權(quán)重,它的默認(rèn)值為 1024。我們可以把它設(shè)置為 2 表示很低的權(quán)重,但是設(shè)置為 0 表示使用默認(rèn)值 1024。下面我們分別運(yùn)行兩個容器,指定它們都使用 Cpu0,并分別設(shè)置 --cpu-shares 為 512 和 1024:

$ docker run -it --rm --cpuset-cpus="0" --cpu-shares=512 u-stress:latest /bin/bash
$ docker run -it --rm --cpuset-cpus="0" --cpu-shares=1024 u-stress:latest /bin/bash

在兩個容器中都運(yùn)行 stress -c 4 命令。

此時主機(jī) Cpu0 的負(fù)載為 100%:

容器中 CPU 的負(fù)載為:

兩個容器分享一個 CPU,所以總量應(yīng)該是 100%。具體每個容器分得的負(fù)載則取決于 --cpu-shares 選項(xiàng)的設(shè)置!我們的設(shè)置分別是 512 和 1024,則它們分得的比例為 1:2。在本例中如果想讓兩個容器各占 50%,只要把?--cpu-shares 選項(xiàng)設(shè)為相同的值就可以了。

總結(jié)

相比限制容器用的內(nèi)存,限制 CPU 的選項(xiàng)要簡潔很多。但是簡潔絕對不是簡單,大多數(shù)把復(fù)雜東西整簡單的過程都會丟失細(xì)節(jié)或是模糊一些概念,比如從 --cpu-period 和 --cpu-quota 選項(xiàng)到 --cpus 選項(xiàng)的進(jìn)化。對于使用者來說這當(dāng)然是好事,可以減緩我們的學(xué)習(xí)曲線,快速入手。

推薦閱讀:

高級運(yùn)維工程師打怪升級之路

中大型網(wǎng)站架構(gòu)演變之路

Jenkins與Docker的自動化CI/CD實(shí)戰(zhàn)

Java堆內(nèi)存又溢出了!教你一招必殺技

10分鐘帶你理解Kubernetes核心概念

Docker+Kubernetes+Jenkins

34張史上最全技術(shù)知識圖譜

最糟糕的是人們在生活中經(jīng)常受到錯誤志向的阻礙而不自知,真到擺脫了那些阻礙時才能明白過來。

總結(jié)

以上是生活随笔為你收集整理的centos中bash占用cpu_Docker 多种维度限制容器可用的 CPU的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91丨porny丨成人蝌蚪 | 亚洲乱人伦 | 免费一区 | 在线观看三级网站 | 成人一区三区 | 5d肉蒲团之性战奶水 | 国产欧美久久久 | 凸凹人妻人人澡人人添 | 奇米四色在线观看 | 一级免费黄色大片 | 国产精品不卡 | 日韩黄色网 | 人人艹人人爱 | 三级小视频在线观看 | 亚洲九九九九 | 操批网站| 九九99精品视频 | 一区二区三区视频免费视 | 亚洲欧美综合在线观看 | 韩国伦理片在线播放 | 国产成人毛毛毛片 | 国产在线xxxx | cekc老妇女cea0 | 777精品久无码人妻蜜桃 | 国产区网址 | 亚洲区在线播放 | 超碰成人福利 | 欧美精品黄| 欧美一区二区三区不卡视频 | 日韩少妇高潮抽搐 | 国产黄视频在线观看 | 亚洲精品国产精品国自产观看 | 在线成人中文字幕 | 欧美极品在线播放 | 一级黄色性生活视频 | a网站在线 | 天天射寡妇 | 日本动漫艳母 | 成人免费视频网 | 中文字幕免费中文 | 国产又黄又粗又猛又爽的视频 | 国产精品主播在线 | www.com欧美 | 露胸app| 性色欲情网站iwww九文堂 | 国产午夜av | 日韩欧美在线不卡 | 国产欧美一区二区三区在线 | 免费成人av | 精品成人在线 | 一区二区在线不卡 | 国产丝袜av| 女人的天堂网 | 光棍影院手机版在线观看免费 | 久久在线免费 | 欧美日韩国产一级 | 日本黄色三级网站 | 黄色小视频在线观看 | 亚洲熟妇无码另类久久久 | 视频二区在线 | 男人的天堂一区二区 | 男人疯狂高潮呻吟视频 | 免费啊v在线观看 | 无码gogo大胆啪啪艺术 | 影音先锋男人的天堂 | www国产91| 少妇脚交调教玩男人的视频 | 欧美美女一级片 | 国产私密视频 | 中文字幕第66页 | 成人动态视频 | 91丨porny丨尤物| 黄色一级欧美 | 中文字幕无产乱码 | 午夜在线视频 | 超碰人人艹 | 亚洲四虎影院 | 我们的2018在线观看免费高清 | 欧美日韩片| 国产99久久九九精品无码免费 | 精品在线你懂的 | 午夜av网| 什么网站可以看毛片 | 久草中文在线 | 69综合 | 日本黄页网站 | 国产三级理论片 | 天天操天天碰 | 韩国一区二区在线播放 | 亚洲视频中文字幕在线观看 | 亚洲综合精品国产 | 日韩理论在线观看 | 狠狠操网站 | 国产丝袜视频在线 | 天天干天天碰 | 久久久久人妻精品一区二区三区 | 日韩福利一区 | 国产精品久久久久久久久晋中 | 成人国产精品久久 |