欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何限制容器可以使用的CPU資源

馬哥Linux運(yùn)維 ? 來(lái)源:博客園sparkdev ? 2024-10-24 17:04 ? 次閱讀

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

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

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

61fef396-90f7-11ef-a511-92fbcf53809c.png

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

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

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

# stress -c 4

我們先來(lái)看看 docker stats 命令的輸出:

621bfb30-90f7-11ef-a511-92fbcf53809c.png

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

6238e4a2-90f7-11ef-a511-92fbcf53809c.png

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

看來(lái)對(duì)于進(jìn)程來(lái)說(shuō)是沒(méi)有 CPU 個(gè)數(shù)這一概念的,內(nèi)核只能通過(guò)進(jìn)程消耗的 CPU 時(shí)間片來(lái)統(tǒng)計(jì)出進(jìn)程占用 CPU 的百分比。這也是我們看到的各種工具中都使用百分比來(lái)說(shuō)明 CPU 使用率的原因。
嚴(yán)謹(jǐn)起見(jià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è)面說(shuō)明了對(duì) CPU 的計(jì)量只能是百分比。
看來(lái)筆者在本文中寫(xiě)的 "CPU 個(gè)數(shù)" 都是不準(zhǔn)確的。既然不準(zhǔn)確,為什么還要用?當(dāng)然是為了容易理解。況且筆者認(rèn)為在 --cpus 選項(xiàng)的上下文中理解為 "CPU 個(gè)數(shù)" 并沒(méi)有問(wèn)題(有興趣的同學(xué)可以讀讀--cpus 選項(xiàng)的由來(lái),人家的初衷也是要表示 CPU 個(gè)數(shù)的)。

雖然 --cpus 選項(xiàng)用起來(lái)很爽,但它畢竟是 1.13 才開(kāi)始支持的。對(duì)于更早的版本完成同樣的功能我們需要配合使用兩個(gè)選項(xiàng):--cpu-period 和 --cpu-quota(1.13 及之后的版本仍然支持這兩個(gè)選項(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 毫秒。它們?cè)谶@里的含義是:在每 100 毫秒的時(shí)間里,運(yùn)行進(jìn)程使用的 CPU 時(shí)間最多為 200 毫秒(需要兩個(gè) CPU 各執(zhí)行 100 毫秒)。要想徹底搞明白這兩個(gè)選項(xiàng)的同學(xué)可以參考:CFS BandWith Control。我們要知道這兩個(gè)選項(xiàng)才是事實(shí)的真相,但是真相往往很殘忍!還好 --cpus 選項(xiàng)成功的解救了我們,其實(shí)它就是包裝了 --cpu-period 和 --cpu-quota。

指定固定的 CPU

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

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

再啟動(dòng)壓力測(cè)試命令:

# stress -c 4

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

6255441c-90f7-11ef-a511-92fbcf53809c.png

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

626f2d3c-90f7-11ef-a511-92fbcf53809c.png

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

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

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

628290de-90f7-11ef-a511-92fbcf53809c.png

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

629e6cb4-90f7-11ef-a511-92fbcf53809c.png

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

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

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

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

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

62b968fc-90f7-11ef-a511-92fbcf53809c.png

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

62d2ef5c-90f7-11ef-a511-92fbcf53809c.png

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

總結(jié)

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

鏈接:https://www.cnblogs.com/sparkdev/p/8052522.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10908

    瀏覽量

    213088
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3060

    瀏覽量

    74353
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3797

    瀏覽量

    81439
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    499

    瀏覽量

    22128
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    492

    瀏覽量

    11974

原文標(biāo)題:Docker: 限制容器可用的 CPU

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Kubernetes之路 1 - Java應(yīng)用資源限制的迷思

    奇妙地被OOM Killer干掉。這背后一個(gè)非常常見(jiàn)的原因是:沒(méi)有正確設(shè)置容器資源限制以及對(duì)應(yīng)的JVM的堆空間大小。我們拿一個(gè)tomcat應(yīng)用為例,其實(shí)例代碼和Kubernetes部署文件
    發(fā)表于 03-29 13:06

    Kubernetes之路 2 - 利用LXCFS提升容器資源可見(jiàn)性

    通過(guò) lxcfs 提供容器資源可見(jiàn)性的方法,可以幫助一些遺留系統(tǒng)更好的識(shí)別容器運(yùn)行時(shí)的資源限制
    發(fā)表于 04-17 14:05

    阿里云容器Kubernetes監(jiān)控(一) - 資源監(jiān)控

    %的工作處理的是容器前和容器后的問(wèn)題,容器前指的是如何本地開(kāi)發(fā)、集成、測(cè)試并部署到容器環(huán)境;而容器后指的是如何對(duì)部署到
    發(fā)表于 04-23 14:35

    阿里云容器Kubernetes監(jiān)控(一) - 資源監(jiān)控

    %的工作處理的是容器前和容器后的問(wèn)題,容器前指的是如何本地開(kāi)發(fā)、集成、測(cè)試并部署到容器環(huán)境;而容器后指的是如何對(duì)部署到
    發(fā)表于 04-23 14:35

    阿里云容器Kubernetes監(jiān)控(一) - 資源監(jiān)控

    %的工作處理的是容器前和容器后的問(wèn)題,容器前指的是如何本地開(kāi)發(fā)、集成、測(cè)試并部署到容器環(huán)境;而容器后指的是如何對(duì)部署到
    發(fā)表于 04-23 14:35

    是否可以使用內(nèi)部FPGA的資源連接到總線

    你好!我正在設(shè)計(jì)一個(gè)MIL-STD控制器。該標(biāo)準(zhǔn)意味著使用直接或變壓器耦合連接到總線。我是否可以使用內(nèi)部FPGA的資源來(lái)完成此連接方法,ori是否必須使用其他外部設(shè)備?先謝謝你!以上來(lái)自于谷歌翻譯
    發(fā)表于 09-30 11:19

    超大規(guī)模商用 K8s 場(chǎng)景下,阿里巴巴如何動(dòng)態(tài)解決容器資源的按需分配問(wèn)題?

    肯定有些地方出問(wèn)題了。于是我們就要剖析,問(wèn)題究竟出在哪里。針對(duì)于內(nèi)存的 OOM,CPU 資源被 throttle,我們可以推斷我們給與容器分配的初始
    發(fā)表于 10-15 14:47

    請(qǐng)問(wèn)使用USB功能時(shí)VBUS可以使用多少電容器

    當(dāng)使用USB功能時(shí),VBUS可以使用多少電容器?
    發(fā)表于 12-09 07:23

    在STM32G474的SBSFU示例中可以使用SPI還是有任何限制?

    您好,我想問(wèn)一下,在用戶應(yīng)用程序中 STM32G474 的 SBSFU 示例中,固件更新是使用 ymodem 協(xié)議完成的,即 UART 我們可以使用 SPI 協(xié)議而不是這個(gè)嗎?這可以使用 SPI 還是有任何限制?????請(qǐng)建議
    發(fā)表于 12-08 08:36

    多少電容器通風(fēng)裝置可以使用USB功能?

    uF。 用戶需要設(shè)計(jì)自己的電路并調(diào)整 VBUS 電容器。用USB-IF 提供的 USB 分析工具 USBET20 , 用戶可以查看VBUS 電容器是否符合 USB-IF 規(guī)格 。
    發(fā)表于 08-28 08:08

    CPU提供了哪些資源,如何評(píng)估CPU資源的消耗

    上面的圖和文字摘自ETSI GS NFV-TST 008,呈現(xiàn)的是一個(gè)物理CPU注1能夠被測(cè)量的幾個(gè)資源維度和他們之間的對(duì)應(yīng)關(guān)系。
    的頭像 發(fā)表于 01-22 09:09 ?1w次閱讀
    <b class='flag-5'>CPU</b>提供了哪些<b class='flag-5'>資源</b>,如何評(píng)估<b class='flag-5'>CPU</b><b class='flag-5'>資源</b>的消耗

    IoT 可以使用 WPT

    IoT 可以使用 WPT
    發(fā)表于 03-19 12:08 ?0次下載
    IoT <b class='flag-5'>可以使</b>用 WPT

    逆變器使用28377S時(shí)CLA與CPU資源分配

    CLA使用后會(huì)大大提高計(jì)算能力,特別在在倍頻采樣中。逆變器設(shè)計(jì)時(shí),CLA中主要處理采樣數(shù)據(jù)和SVPWM計(jì)算,CPU主要處理環(huán)路控制。可以使用軟件觸發(fā)CLA方式,使CPU中斷和CLA中斷同步,同時(shí)
    發(fā)表于 11-08 14:06 ?8次下載
    逆變器使用28377S時(shí)CLA與<b class='flag-5'>CPU</b><b class='flag-5'>資源</b>分配

    Linux內(nèi)核是如何限制進(jìn)程對(duì)CPU資源使用的?

    在使用 Kubernetes(簡(jiǎn)稱(chēng)K8s) 時(shí),通常會(huì)在同一臺(tái)機(jī)器上部署多個(gè) Pod。如果某個(gè) Pod 中的服務(wù)出現(xiàn)問(wèn)題(如出現(xiàn)死循環(huán)),將會(huì)導(dǎo)致占用大量的 CPU 時(shí)間,從而影響到其他 Pod 的正常運(yùn)行。
    發(fā)表于 05-08 18:14 ?1291次閱讀
    Linux內(nèi)核是如何<b class='flag-5'>限制</b>進(jìn)程對(duì)<b class='flag-5'>CPU</b><b class='flag-5'>資源</b>使用的?

    Linux是如何對(duì)容器下的進(jìn)程進(jìn)行CPU限制的,底層是如何工作的?

    現(xiàn)在很多公司的服務(wù)都是跑在容器下,我來(lái)問(wèn)幾個(gè)容器 CPU 相關(guān)的問(wèn)題,看大家對(duì)天天在用的技術(shù)是否熟悉。
    的頭像 發(fā)表于 11-29 14:31 ?1583次閱讀
    Linux是如何對(duì)<b class='flag-5'>容器</b>下的進(jìn)程進(jìn)行<b class='flag-5'>CPU</b><b class='flag-5'>限制</b>的,底層是如何工作的?