溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么創(chuàng)建的docker鏡像u-stress進行壓力測試

發(fā)布時間:2021-11-16 14:27:59 來源:億速云 閱讀:314 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“怎么創(chuàng)建的docker鏡像u-stress進行壓力測試”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么創(chuàng)建的docker鏡像u-stress進行壓力測試”吧!

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

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

怎么創(chuàng)建的docker鏡像u-stress進行壓力測試

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

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

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

# stress -c 4

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

怎么創(chuàng)建的docker鏡像u-stress進行壓力測試

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

看來對于進程來說是沒有 CPU 個數(shù)這一概念的,內(nèi)核只能通過進程消耗的 CPU 時間片來統(tǒng)計出進程占用 CPU 的百分比。這也是我們看到的各種工具中都使用百分比來說明 CPU 使用率的原因。
嚴謹起見,我們看看 docker 的官方文檔中是如何解釋 --cpus 選項的:
Specify how much of the available CPU resources a container can use.
果然,人家用的是 "how much",不可數(shù)的!并且 --cpus 選項支持設(shè)為小數(shù)也從側(cè)面說明了對 CPU 的計量只能是百分比。
看來筆者在本文中寫的 "CPU 個數(shù)">

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

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

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

指定固定的 CPU

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

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

再啟動壓力測試命令:

# stress -c 4

然后查看主機 CPU 的負載情況:

怎么創(chuàng)建的docker鏡像u-stress進行壓力測試

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

怎么創(chuàng)建的docker鏡像u-stress進行壓力測試

Cpu1 和 Cpu3 的負載都達到了 100%。
容器的 CPU 負載也達到了 200%:

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

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

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

在兩個容器中都運行 stress -c 4 命令。

此時主機 Cpu0 的負載為 100%:

怎么創(chuàng)建的docker鏡像u-stress進行壓力測試

容器中 CPU 的負載為:

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

到此,相信大家對“怎么創(chuàng)建的docker鏡像u-stress進行壓力測試”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI