容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)3.2 Dker容器資源控制_第1頁(yè)
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)3.2 Dker容器資源控制_第2頁(yè)
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)3.2 Dker容器資源控制_第3頁(yè)
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)3.2 Dker容器資源控制_第4頁(yè)
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)3.2 Dker容器資源控制_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Docker容器技術(shù)與應(yīng)用湖北輕工職業(yè)技術(shù)學(xué)院Docker容器管理項(xiàng)目3項(xiàng)目背景在當(dāng)今數(shù)字化時(shí)代,軟件開(kāi)發(fā)與部署面臨諸多挑戰(zhàn)。傳統(tǒng)應(yīng)用部署方式繁瑣,環(huán)境配置復(fù)雜且易出現(xiàn)兼容性問(wèn)題,導(dǎo)致開(kāi)發(fā)、測(cè)試和運(yùn)維效率低下。隨著業(yè)務(wù)規(guī)模的快速擴(kuò)張,對(duì)應(yīng)用的快速迭代和靈活部署提出了更高要求?!癉ocker容器管理”旨在解決這些痛點(diǎn),提升整體開(kāi)發(fā)運(yùn)維效能。Docker容器管理項(xiàng)目3

容器是Docker的另一個(gè)核心概念。對(duì)比鏡像而言,鏡像是靜態(tài)的只讀文件,容器是鏡像的一個(gè)運(yùn)行實(shí)例,容器帶有運(yùn)行時(shí)需要的可寫(xiě)文件層。本項(xiàng)目主要介紹圍繞容器這一核心概念的具體操作,包括創(chuàng)建容器、啟動(dòng)容器、終止容器、進(jìn)入容器內(nèi)執(zhí)行操作、刪除容器和通過(guò)導(dǎo)入/導(dǎo)出容器來(lái)實(shí)現(xiàn)容器遷移等。項(xiàng)目三:Docker容器管理目錄任務(wù)3.1、認(rèn)識(shí)Docker容器任務(wù)3.2、Docker容器資源控制認(rèn)識(shí)Docker容器回顧1、容器的基本概念、特點(diǎn)和實(shí)現(xiàn)原理。2、了解鏡像和容器的關(guān)系。3、容器的基本操作。知識(shí)目標(biāo)了解控制組(CGroups)的功能。能力目標(biāo)掌握利用CGoups對(duì)資源進(jìn)行控制的方法。素質(zhì)目標(biāo)培養(yǎng)勇于探索、尊重科學(xué)的精神。小王編寫(xiě)完Docker容器基礎(chǔ)操作手冊(cè)后,考慮到基礎(chǔ)操作手冊(cè)中只包含對(duì)容器的基本操作和維護(hù)的內(nèi)容,為了讓同事們更高效地使用容器,小王決定在基礎(chǔ)操作手冊(cè)中添加關(guān)于對(duì)容器資源控制的內(nèi)容,并通過(guò)實(shí)例說(shuō)明。任務(wù)3.2Docker容器資源控制任務(wù)要求3.2CGroups的含義

在使用

docker

運(yùn)行容器時(shí),默認(rèn)的情況下,docker沒(méi)有對(duì)容器進(jìn)行硬件資源的限制,當(dāng)一臺(tái)主機(jī)上運(yùn)行幾百個(gè)容器,這些容器雖然互相隔離,但是底層卻使用著相同的CPU、內(nèi)存和磁盤(pán)資源。如果不對(duì)容器使用的資源進(jìn)行限制,那么容器之間會(huì)互相影響,小的來(lái)說(shuō)會(huì)導(dǎo)致容器資源使用不公平;大的來(lái)說(shuō),可能會(huì)導(dǎo)致主機(jī)和集群資源耗盡,服務(wù)完全不可用。docker作為容器的管理者,自然提供了控制容器資源的功能。正如使用內(nèi)核的namespace來(lái)做容器之間的隔離,docker也是通過(guò)內(nèi)核的cgroups來(lái)做容器的資源限制;包括CPU、內(nèi)存、磁盤(pán)三大方面,基本覆蓋了常見(jiàn)的資源配額和使用量控制。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups的含義 CGroups(ControlGroups)是Linux內(nèi)核提供的一種可以限制單個(gè)進(jìn)程或者多個(gè)進(jìn)程所使用資源的機(jī)制,這種機(jī)制可以根據(jù)需求把一系列系統(tǒng)任務(wù)及其子任務(wù)整合(或分隔)到按資源劃分等級(jí)的不同組內(nèi),從而為系統(tǒng)資源管理提供一個(gè)統(tǒng)一的框架??梢詫?duì)CPU、內(nèi)存和磁盤(pán)I/O等資源實(shí)現(xiàn)控制,Docker可使用CGroups提供的資源限制功能來(lái)完成CPU、內(nèi)存等部分的資源控制。 CGroups提供了對(duì)進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),內(nèi)存或磁盤(pán)I/O的分配控制等具體的資源管理功能是通過(guò)對(duì)進(jìn)程進(jìn)行分組化管理來(lái)實(shí)現(xiàn)的。這些具體的資源管理功能稱(chēng)為CGroups子系統(tǒng)或控制器。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups的功能限制資源使用,比如內(nèi)存使用上限以及文件系統(tǒng)的緩存限制。CGroups可實(shí)現(xiàn)對(duì)進(jìn)程組使用的資源總額的限制。例如,使用memory子系統(tǒng)為進(jìn)程組設(shè)定一個(gè)內(nèi)存使用上限,當(dāng)進(jìn)程組使用的內(nèi)存達(dá)到限額后再申請(qǐng)內(nèi)存時(shí)。會(huì)觸發(fā)OOM(OutOfMemory)警告。優(yōu)先級(jí)控制,CPU利用和磁盤(pán)IO吞吐。CGrups可實(shí)現(xiàn)對(duì)進(jìn)程組的優(yōu)先級(jí)控制。通過(guò)分配CPU時(shí)間片數(shù)量及硬盤(pán)i/o、帶寬大小可控制進(jìn)程的優(yōu)先級(jí)。例如,使用CPU子系統(tǒng)為某個(gè)進(jìn)程組分配特定cpushare。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups的功能資源統(tǒng)計(jì),主要目的是為了計(jì)費(fèi)。 CGroups可實(shí)現(xiàn)對(duì)進(jìn)程組使用的資源數(shù)量的記錄。例如使用cpuacct子系統(tǒng)可記錄某個(gè)進(jìn)程組使用的CPU時(shí)間。任務(wù)控制,掛起進(jìn)程,恢復(fù)執(zhí)行進(jìn)程。 CGroups可實(shí)現(xiàn)對(duì)進(jìn)程組的隔離和控制。例如,使用ns子系統(tǒng)對(duì)不同的進(jìn)程線使用不同的namespace,以達(dá)到隔離的目的,使用不同的進(jìn)程組實(shí)現(xiàn)各自的進(jìn)程、網(wǎng)絡(luò)文件系統(tǒng)掛載空間,也可使用freezer子系統(tǒng)將進(jìn)程組暫停和恢復(fù)。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups的特點(diǎn)(1)控制族群控制族群是一組按照某種標(biāo)準(zhǔn)劃分的進(jìn)程。CGroups中的資源控制是以控制族群為單位實(shí)現(xiàn)的。一個(gè)進(jìn)程可以加入某個(gè)控制族群中,也可以從一個(gè)進(jìn)程細(xì)移到另一個(gè)控制族群。一個(gè)進(jìn)程組的進(jìn)程可以使用CGroups以控制族群為單位分配資康并受到CGroups以控制族群為單位設(shè)定的限制。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups的特點(diǎn)(2)層級(jí)控制族群可以組織為hierarchical的形式,即一棵控制族群樹(shù)。子控制自動(dòng)繼承父節(jié)點(diǎn)的特定屬性,子控制組還可以有自己特定的屬性。(3)子系統(tǒng)一個(gè)子系統(tǒng)就是一個(gè)資源控制器,如memory子系統(tǒng)是一個(gè)內(nèi)存控的子系統(tǒng)必須附加到一個(gè)層級(jí)上才能起作用。一個(gè)子系統(tǒng)附加到某個(gè)層級(jí)以后,這個(gè)壓罷級(jí)上的所有控制族群都受到這個(gè)子系統(tǒng)的控制。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups主要通過(guò)以下9大子系統(tǒng)實(shí)現(xiàn)(1)blkio:為每個(gè)塊設(shè)備設(shè)置I/O限制,如磁盤(pán)、光盤(pán)和USB等設(shè)備。(2)cpu:使用調(diào)度程序提供對(duì)CPU的cgroup任務(wù)訪問(wèn)。(3)cpuacct:自動(dòng)生成cgroup任務(wù)的CPU資源使用報(bào)告。(4)cpuset:為cgroup中的任務(wù)分配獨(dú)立CPU(在多核系統(tǒng)中)和內(nèi)存節(jié)點(diǎn)。(5)devices:允許或拒絕cgroup任務(wù)訪問(wèn)設(shè)備。(6)freezer:暫停和恢復(fù)cgroup任務(wù)。(7)memory:設(shè)置每個(gè)cgroup任務(wù)使用的內(nèi)存限制,并自動(dòng)生成內(nèi)存資源使用報(bào)告(8)net_cls:標(biāo)記每個(gè)網(wǎng)絡(luò)包以供cgroup任務(wù)使用。(9)ns:命名空間子系統(tǒng)。3.2任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)CPU資源配額控制Docker的資源限制和隔離完全基于Linuxcgroups。對(duì)CPU資源的限制方式也和cgroups相同。Docker提供的CPU資源限制選項(xiàng)可以在多核系統(tǒng)上限制容器能利用哪些vCPU。而對(duì)容器最多能使用的CPU時(shí)間有兩種限制方式:一是有多個(gè)CPU密集型的容器競(jìng)爭(zhēng)CPU時(shí),設(shè)置各個(gè)容器能使用的CPU時(shí)間相對(duì)比例。二是以絕對(duì)的方式設(shè)置容器在每個(gè)調(diào)度周期內(nèi)最多能使用的CPU時(shí)間。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CPU資源配額控制查看docker容器真實(shí)的內(nèi)存,可以[root@localhost~]#dockerstats2ec93f94157eCONTAINERIDNAMECPU%MEMUSAGE/LIMITMEM%NETI/OBLOCKI/OPIDS2ec93f94157e redhat 0.00%10.96MiB/7.607GiB0.14%2.91kB/0B3.72MB/120kB1任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CPU資源配額控制dockerrun命令和CPU限制相關(guān)的所有選項(xiàng)如下:其中--cpuset-cpus用于設(shè)置容器可以使用的vCPU核。-c,--cpu-shares用于設(shè)置多個(gè)容器競(jìng)爭(zhēng)CPU時(shí),各個(gè)容器相對(duì)能分配到的CPU時(shí)間比例。--cpu-period和--cpu-quata用于絕對(duì)設(shè)置容器能使用CPU時(shí)間。--cpuset-mems暫用不上,這里不談。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CPU資源配額控制(1)CPU份額控制在創(chuàng)建容器時(shí),利用--cpu-shares參數(shù)指定容器所使用的CPU份額值。[root@localhost~]#dockerrun-dit

--cpu-shares100busybox

容器創(chuàng)建完成后,可以在/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-<容器完整ID>.scope目錄中查看cpu.shares文件,得到CPU份額配置信息。#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-3aebaaa3b2c50bb0c6b91e40aece4061c078f45756e958b01e76dcee34badb33.scope/cpu.shares100任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2--cpu-shares的值僅僅表示一個(gè)彈性的加權(quán)值,不能保證可以獲得1個(gè)VCPU或者多少吉赫茲的CPU資源。

默認(rèn)情況下,每個(gè)Docker容器的CPU份額都是1024。CPU份額只有在同時(shí)運(yùn)行多個(gè)容器時(shí)才能體現(xiàn)其效果,單個(gè)容器的份額是沒(méi)有意義的。例如,容器A和容器B所占用的CPU份額分別為100和50,表示在CPU進(jìn)行時(shí)間片分配的時(shí)候,容器A獲得CPU的時(shí)間片的機(jī)會(huì)是容器B的兩倍,但分配的結(jié)果取決于當(dāng)時(shí)主機(jī)和其他容器的運(yùn)行狀態(tài)。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2假設(shè)有三個(gè)正在運(yùn)行的容器,這三個(gè)容器中的任務(wù)都是CPU密集型的。第一個(gè)容器的cpu共享權(quán)值是1024,其它兩個(gè)容器的cpu共享權(quán)值是512。第一個(gè)容器將得到50%的CPU時(shí)間,而其它兩個(gè)容器就只能各得到25%的CPU時(shí)間了。如果再添加第四個(gè)cpu共享值為1024的容器,每個(gè)容器得到的CPU時(shí)間將重新計(jì)算。第一個(gè)容器的CPU時(shí)間變?yōu)?3%,其它容器分得的CPU時(shí)間分別為16.5%、16.5%、33%。

必須注意的是,這個(gè)比例只有在CPU密集型的任務(wù)執(zhí)行時(shí)才有用。在四核的系統(tǒng)上,假設(shè)有四個(gè)單進(jìn)程的容器,它們都能各自使用一個(gè)核的100%CPU時(shí)間,不管它們的cpu共享權(quán)值是多少。

在多核系統(tǒng)上,CPU時(shí)間權(quán)值是在所有CPU核上計(jì)算的。即使某個(gè)容器的CPU時(shí)間限制少于100%,它也能使用各個(gè)CPU核的100%時(shí)間。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2CGroups只在容器分配的資源緊缺時(shí),也就是說(shuō),在需要對(duì)容器使用的資源進(jìn)行限制時(shí),才會(huì)生效。因此,無(wú)法單純根據(jù)某個(gè)容器的CPU份額來(lái)確定有多少CPU資源分配給它,資源分配結(jié)果取決于同時(shí)運(yùn)行的其他容器的CPU分配和容器中進(jìn)程的運(yùn)行情況。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2例如:利用busybox鏡像生成兩個(gè)容器,設(shè)置第二個(gè)容器的CPU使用率是第一個(gè)容器的兩倍。#dockerrun-dit--nametest1--cpu-shares100busyboxe65f0cc12e25dac7775b0ffe573c86ef3ed63a07e43ebf2c59895d7da340911f#dockerrun-dit--nametest2--cpu-shares200busybox433d9aace3ffd1c32d7ab548c37b688b13138cb374b3a4146940acb735817555任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2容器創(chuàng)建完成后,可以在/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-<容器完整ID>.scope目錄中查看cpu.shares文件,得到CPU份額配置信息。#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-e65f0cc12e25dac7775b0ffe573c86ef3ed63a07e43ebf2c59895d7da340911f.scope/cpu.shares100#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-433d9aace3ffd1c32d7ab548c37b688b13138cb374b3a4146940acb735817555.scope/cpu.shares200任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2(2)CPU周期控制。--cpu-period和--cpu-quota參數(shù)可以控制容器分配的CPU的時(shí)鐘周期。①--cpu-period用于指定容器對(duì)CPU的使用要在多長(zhǎng)時(shí)間內(nèi)做一次重新分配。②--cpu-quota用于指定在這個(gè)周期內(nèi),最多可以運(yùn)行容器的時(shí)間。和--cpu-shares不同的是,這種配置指定了一個(gè)絕對(duì)值,且沒(méi)有彈性空間,容器對(duì)CPU資源的使用絕對(duì)不會(huì)超過(guò)配置的值。--cpu-period和--cpu-quota的單位為微秒;--cpu-period的最小值為1000μs,最大值為1s(10^6μs),默認(rèn)值為0.1s(100000μs);--cpu-quota的值默認(rèn)為-1,表示不做控制。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2例1:如果容器進(jìn)程需要每秒使用單個(gè)CPU的0.2s時(shí)間,則可以將cpu-period設(shè)置為1000000(1s),將cpu-quota設(shè)置為200000(0.2s)。在多核情況下,如果允許容器進(jìn)程完全占用兩個(gè)CPU,則可以將cpu-period設(shè)置為100000(即0.1s),即cpu-period的默認(rèn)值,將cpu-quota設(shè)置為200000(0.2s)。[root@localhost~]#dockerrun-dit--cpu-period100000--cpu-quota200000busybox任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2容器創(chuàng)建完成后,可以在/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-<容器的完整ID>.scope目錄中查看cpu.cfs_period_us和cpu.cfs_quota_us文件。#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-1be3b854e1dba63bac9e178af85768b84a5cbf949a76cad05dc4c7073edc8b7.scope/cpu.cfs_period_us100000#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-f1be3b854e1dba63bac9e178af85768b84a5cbf949a76cad05dc4c7073edc8b7.scope/cpu.cfs_quota_us200000任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2例2:假如需要給此容器分配cpu使用率的20%,則參數(shù)需要設(shè)置為20000,相當(dāng)于每個(gè)周期分配給這個(gè)容器0.2s。[root@localhost~]#dockerrun-itd--name=t1--cpu-quota20000busybox任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2(3)CPU內(nèi)核控制對(duì)于多核CPU的服務(wù)器,Docker可以使用--cpuset-cpus和--cpuset-mems參數(shù)控制容器運(yùn)行,限定使用哪些CPU內(nèi)核和內(nèi)存節(jié)點(diǎn)。其對(duì)具有NUMA拓?fù)洌ň哂卸郈PU、多內(nèi)存節(jié)點(diǎn))的服務(wù)器尤其有用,可以對(duì)需要高性能計(jì)算的容器進(jìn)行性能最優(yōu)的配置。如果服務(wù)器只有一個(gè)內(nèi)存節(jié)點(diǎn),則--cpuset-mems的配置基本上不會(huì)有明顯效果。簡(jiǎn)而言之:--cpuset-cpus可以設(shè)置容器可以在哪些CPU核上運(yùn)行。--cpuset-mems參數(shù)表示在NUMA系統(tǒng)上,我們可以設(shè)置容器可以使用的內(nèi)存節(jié)點(diǎn)。例如,創(chuàng)建容器名為busybox1的容器,要求創(chuàng)建的容器只能使用0和1兩個(gè)內(nèi)核。[root@localhost~]#dockerrun-dit--namebusybox1--cpuset-cpus0-1busybox任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2(3)CPU內(nèi)核控制容器創(chuàng)建完成后,可以在/sys/fs/cgroup/cpuset/system.slice/docker-<容器的完整ID>.scope目錄中查看cpuset.cpus文件。#cat/sys/fs/cgroup/cpuset/system.slice/docker-f6b73673874dc3dad060428ad4dedd7500ef66a1ac2175c0249cdf0176ecdac.scope/cpuset.cpus0-1任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2內(nèi)存配額控制Docker提供的內(nèi)存限制功能有以下幾點(diǎn):容器能使用的內(nèi)存和交換分區(qū)大小。容器的核心內(nèi)存大小。容器虛擬內(nèi)存的交換行為。容器內(nèi)存的軟性限制。是否殺死占用過(guò)多內(nèi)存的容器。容器被殺死的優(yōu)先級(jí)一般情況下,達(dá)到內(nèi)存限制的容器過(guò)段時(shí)間后就會(huì)被系統(tǒng)殺死。3.2任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)內(nèi)存配額控制執(zhí)行dockerrun命令時(shí)能使用的和內(nèi)存限制相關(guān)的所有選項(xiàng)如下。3.2任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)內(nèi)存配額控制Docker通過(guò)如下參數(shù)來(lái)控制容器的內(nèi)存使用配額,可以實(shí)現(xiàn)控制容器的swap大小、可用內(nèi)存大小等。(1)--memory-swappiness:用于設(shè)置容器的虛擬內(nèi)存控制行為,參數(shù)值為0~100,默認(rèn)值為60,參數(shù)值越小,越傾向于使用物理內(nèi)存。當(dāng)參數(shù)值為100時(shí),表示盡量使用swap分區(qū);當(dāng)參數(shù)值為0時(shí),表示禁用容器swap功能。(2)--kernel-memory:核心內(nèi)存限制,參數(shù)值最小為4MB。(3)--memory:設(shè)置容器使用的最大內(nèi)存上限,默認(rèn)單位為byte,可以使用KB、MB或GB等。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2

(4)--memory-swap:等于內(nèi)存和swap分區(qū)大小的總和,其設(shè)置為-1時(shí),表示swap分區(qū)的大小是無(wú)限的。其默認(rèn)單位為byte,可以使用KB、MB或GB等。如果--memory-swap的設(shè)置值小于--memory的值,則使用默認(rèn)值,即--memory-swap值的兩倍。

(5)--memory-reservation:?jiǎn)⒂脧椥缘膬?nèi)存共享,當(dāng)宿主機(jī)資源充足時(shí),允許容器盡量多地使用內(nèi)存,當(dāng)檢測(cè)到內(nèi)存競(jìng)爭(zhēng)或者內(nèi)存不充足時(shí),強(qiáng)制將容器的內(nèi)存降低到memory-reservation所指定的內(nèi)存大小。若不設(shè)置此選項(xiàng),有可能出現(xiàn)某些容器長(zhǎng)時(shí)間占用大量?jī)?nèi)存的情況,導(dǎo)致性能上的損失。

默認(rèn)情況下,容器可以使用宿主機(jī)上的所有空閑內(nèi)存。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2用戶(hù)內(nèi)存限制用戶(hù)內(nèi)存限制就是對(duì)容器能使用的內(nèi)存和交換分區(qū)的大小作出限制。使用時(shí)要遵循兩條直觀的規(guī)則:-m,--memory選項(xiàng)的參數(shù)最小為4M。--memory-swap不是交換分區(qū),而是內(nèi)存加交換分區(qū)的總大小,所以--memory-swap必須比-m,--memory大。在這兩條規(guī)則下,一般有四種設(shè)置方式。(1)不設(shè)置如果不設(shè)置-m,--memory和--memory-swap,容器默認(rèn)可以用完宿主機(jī)的所有內(nèi)存和swap分區(qū)。不過(guò)注意,如果容器占用宿主機(jī)的所有內(nèi)存和swap分區(qū)超過(guò)一段時(shí)間后,會(huì)被宿主機(jī)系統(tǒng)殺死(如果沒(méi)有設(shè)置–00m-kill-disable=true的話)。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2

(2)設(shè)置-m,--memory

不設(shè)置--memory-swap給-m或--memory設(shè)置一個(gè)不小于4M的值,假設(shè)為a,不設(shè)置--memory-swap,或?qū)?-memory-swap設(shè)置為0。這種情況下,容器能使用的內(nèi)存大小為a,能使用的交換分區(qū)大小也為a。因?yàn)镈ocker默認(rèn)容器交換分區(qū)的大小和內(nèi)存相同。如果在容器中運(yùn)行一個(gè)一直不停申請(qǐng)內(nèi)存的程序,你會(huì)觀察到該程序最終能占用的內(nèi)存大小為2a。比如$dockerrun-m1Gubuntu:16.04,該容器能使用的內(nèi)存大小為1G,能使用的swap分區(qū)大小也為1G。容器內(nèi)的進(jìn)程能申請(qǐng)到的總內(nèi)存大小為2G。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2

(3)設(shè)置-m,--memory=a,--memory-swap=b,且b>a

給-m設(shè)置一個(gè)參數(shù)a,給--memory-swap設(shè)置一個(gè)參數(shù)b。a時(shí)容器能使用的內(nèi)存大小,b是容器能使用的內(nèi)存大小+swap分區(qū)大小。所以b必須大于a。b-a即為容器能使用的swap分區(qū)大小。比如$dockerrun-m1G--memory-swap3Gubuntu:16.04,該容器能使用的內(nèi)存大小為1G,能使用的swap分區(qū)大小為2G。容器內(nèi)的進(jìn)程能申請(qǐng)到的總內(nèi)存大小為3G。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2

(4)設(shè)置-m,--memory=a,--memory-swap=-1給-m參數(shù)設(shè)置一個(gè)正常值,而給--memory-swap設(shè)置成-1。這種情況表示限制容器能使用的內(nèi)存大小為a,而不限制容器能使用的swap分區(qū)大小。這時(shí)候,容器內(nèi)進(jìn)程能申請(qǐng)到的內(nèi)存大小為a+宿主機(jī)的swap大小。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2例如,創(chuàng)建容器名為memory1的容器,設(shè)置容器使用的最大內(nèi)存為128MB。[root@localhost~]#dockerrun-tid--namememory1--memory128mbusybox默認(rèn)情況下,Docker還為容器分配了同樣大小的swap分區(qū),如上面的代碼創(chuàng)建出的容器實(shí)際上最多可以使用256MB內(nèi)存,而不是128MB內(nèi)存。如果需要自定義swap分區(qū)大小,則可以通過(guò)聯(lián)合使用--memory-swap參數(shù)來(lái)實(shí)現(xiàn)控制。

任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2任務(wù)3.2Docker容器資源控制與CPU的CGroups配置類(lèi)似,Docker容器在目錄/sys/fs/cgroup/memory/system.slice/docker-<容器的完整ID>.scope中創(chuàng)建相應(yīng)的CGroups配置文件,可通過(guò)查看memory.limit_in_bytes和memory.memsw.limit_in_bytes文件提取設(shè)置的值。#cat/sys/fs/cgroup/memory/system.slice/docker-8e2e1bd17b56afe4a803ecb161a3eaf52a28e6587fb50245e20f92bf5fa3737e.scope/memory.limit_in_bytes134217728 //128MB=128×1024×1024=134217728Byte#cat/sys/fs/cgroup/memory/system.slice/docker-8e2e1bd17b56afe4a803ecb161a3eaf52a28e6587fb50245e20f92bf5fa3737e.scope/memory.memsw.limit_in_bytes268435456 //256MB=256×1024×1024=268435456byte3.2任務(wù)3.2Docker容器資源控制注意:執(zhí)行上述命令時(shí),如果:出現(xiàn)下述提示信息,則表示主機(jī)上默認(rèn)不啟用CGrcroups來(lái)控制swap分區(qū),需修改grub啟動(dòng)參數(shù)。WARNING:Yourkerneldoesnotsupportswaplimitcapabilities,memorylimitedwithoutswap3.2磁盤(pán)I/O配額控制Docker通過(guò)以下參數(shù)實(shí)現(xiàn)對(duì)磁盤(pán)I/O的控制,其中大多數(shù)參數(shù)必須在有宿主機(jī)設(shè)備的情況下使用。(1)--device-read-bps:限制設(shè)備的讀速度,單位可以是KB/s、MB/s或GB/s。(2)--device-read-iops:限制設(shè)備每秒讀I/O的次數(shù)。(3)--device-write-bps:限制設(shè)備的寫(xiě)速度,單位可以是KB/s、MB/s或GB/s。(4)--device-write-iops:限制設(shè)備每秒寫(xiě)I/O的次數(shù)。任務(wù)3.2Docker容器資源控制相關(guān)知識(shí)3.2(5)--blkio-weight:容器默認(rèn)磁盤(pán)I/O的加權(quán)值,有效值為10~100。(6)--blkio-weight-device

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論