中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

濟(jì)南學(xué)生網(wǎng)站建設(shè)求職購(gòu)物網(wǎng)站頁(yè)面設(shè)計(jì)

濟(jì)南學(xué)生網(wǎng)站建設(shè)求職,購(gòu)物網(wǎng)站頁(yè)面設(shè)計(jì),做源碼演示的網(wǎng)站,網(wǎng)站seo優(yōu)化方案項(xiàng)目策劃書Docker:namespace環(huán)境隔離 & CGroup資源控制 Docker虛擬機(jī)容器 namespace相關(guān)命令ddmkfsdfmountunshare 進(jìn)程隔離文件隔離 CGroup相關(guān)命令pidstatstresscgroup控制 內(nèi)存控制CPU控制 Docker 在開發(fā)中,經(jīng)常會(huì)遇到環(huán)境問(wèn)題,比如程序依賴某個(gè)…

Docker:namespace環(huán)境隔離 & CGroup資源控制

    • Docker
      • 虛擬機(jī)
      • 容器
    • namespace
      • 相關(guān)命令
        • dd
        • mkfs
        • df
        • mount
        • unshare
      • 進(jìn)程隔離
      • 文件隔離
    • CGroup
      • 相關(guān)命令
        • pidstat
        • stress
        • cgroup控制
      • 內(nèi)存控制
      • CPU控制


Docker

在開發(fā)中,經(jīng)常會(huì)遇到環(huán)境問(wèn)題,比如程序依賴某個(gè)庫(kù),庫(kù)又要具體的版本,以及某些函數(shù)必須在指定平臺(tái)使用,這就會(huì)為開發(fā)帶來(lái)很大的麻煩。

為此,有人提出采用虛擬化技術(shù),為軟件虛擬出一個(gè)環(huán)境。就像是在一個(gè)冰天雪地的地方建了一個(gè)花房養(yǎng)花,花房?jī)?nèi)溫度濕度都剛剛好,將花房與外部的冰雪隔離開。

這種實(shí)現(xiàn)環(huán)境隔離的技術(shù),主要有虛擬機(jī)和容器兩種,Docker屬于容器化的隔離技術(shù)。

虛擬機(jī)

所謂虛擬機(jī),其實(shí)就是把一臺(tái)物理主機(jī)虛擬為多臺(tái)邏輯上的計(jì)算機(jī)。多臺(tái)虛擬機(jī)共用物理上的同一臺(tái)計(jì)算機(jī),而每個(gè)邏輯上的計(jì)算機(jī)可以運(yùn)行不同的操作系統(tǒng),安裝不同的庫(kù),從而提供不同的環(huán)境。

在這里插入圖片描述

如圖,上圖紅色部分與藍(lán)色部分是兩個(gè)不同的虛擬機(jī),虛擬機(jī)技術(shù)在硬件層之上,在操作系統(tǒng)層就開始進(jìn)行隔離。虛擬機(jī)通過(guò)偽造一個(gè)硬件的抽象接口,把操作系統(tǒng)嫁接到硬件上。

在這里插入圖片描述

在硬件層與操作系統(tǒng)層之間,會(huì)存在一個(gè)虛擬化層,這其實(shí)就是一個(gè)軟件,該層會(huì)負(fù)責(zé)分配硬件資源。

可以看出,如果想要?jiǎng)?chuàng)建多個(gè)虛擬機(jī),就要在一臺(tái)物理主機(jī)上跑多個(gè)操作系統(tǒng),這其實(shí)要不小的開銷,而容器是一種更加輕量的隔離技術(shù)。


容器

容器也是一種虛擬化的實(shí)現(xiàn)技術(shù),它在操作系統(tǒng)之上進(jìn)行環(huán)境隔離,每個(gè)容器可以有自己的一套工具和庫(kù),但是它們共享操作系統(tǒng)的內(nèi)核

在這里插入圖片描述

如圖,紅色和藍(lán)色區(qū)域,是兩個(gè)不同的容器,它們的網(wǎng)絡(luò),文件系統(tǒng)等等都是隔離的,互不影響。

因?yàn)槭褂猛瑯拥牟僮飨到y(tǒng)內(nèi)核,所以它們的系統(tǒng)調(diào)用接口自然就相同,但是基于相同的系統(tǒng)調(diào)用接口,配置了不同的庫(kù),不同的文件系統(tǒng),那么最后兩個(gè)容器就不同。

在這里插入圖片描述

比如說(shuō)上圖,可以通過(guò)容積隔離技術(shù)在一個(gè)centOS操作系統(tǒng)上,運(yùn)行不同版本的Ubuntu容器。這聽(tīng)起來(lái)很異想天開,但其實(shí)不然。

每個(gè)容器有自己獨(dú)立的用戶空間,這包括文件系統(tǒng)、庫(kù)和用戶級(jí)工具。用戶操作接口是用戶在容器內(nèi)操作系統(tǒng)時(shí)接觸到的命令行工具、庫(kù)和應(yīng)用。因此可以在上層的容器中,執(zhí)行Ubuntu的命令,雖然內(nèi)核是CentOS的。

相比于虛擬機(jī)技術(shù),容器化技術(shù)非常輕量,容器相當(dāng)于一個(gè)跑在操作系統(tǒng)上的進(jìn)程,啟動(dòng)一個(gè)進(jìn)程的速度是非??斓?#xff0c;通過(guò)容器技術(shù),只需幾秒鐘就在主機(jī)上打開一個(gè)新的操作系統(tǒng)。

而容器化技術(shù),目前最流行的實(shí)現(xiàn)方案就是Docker。

那么容器化技術(shù)是如何實(shí)現(xiàn)各種資源的隔離的?對(duì)Linux來(lái)說(shuō),它依賴于namespaceCGroup技術(shù),這兩個(gè)技術(shù)是由Linux內(nèi)核提供的。

  • namespace:實(shí)現(xiàn)進(jìn)程,文件系統(tǒng),用戶等資源隔離
  • CGroup:實(shí)現(xiàn)CPU,內(nèi)存,網(wǎng)絡(luò)等資源隔離

namespace

namespaceLinux 內(nèi)核用來(lái)隔離內(nèi)核資源的方式。通過(guò) namespace 可以讓進(jìn)程只能看到與自己相關(guān)的一部分資源,不同namespace的進(jìn)程感覺(jué)不到對(duì)方的存在。

具體的實(shí)現(xiàn)方式是把一個(gè)或多個(gè)進(jìn)程的相關(guān)資源指定在同一個(gè) namespace 中。namespaces 是對(duì)全局系統(tǒng)資源的一種封裝隔離,使得處于不同 namespace 的進(jìn)程擁有獨(dú)立的全局系統(tǒng)資源,改變一個(gè)namespace 中的系統(tǒng)資源只會(huì)影響當(dāng)前namespace 里的進(jìn)程,對(duì)其他namespace 中的進(jìn)程沒(méi)有影響。

常見(jiàn)namespace

namespace隔離資源
UTS主機(jī)名和域名
IPC進(jìn)程間通信:信號(hào)量、消息隊(duì)列、共享內(nèi)存
PID進(jìn)程
NetWork網(wǎng)絡(luò)設(shè)備,端口等
Mount文件系統(tǒng)
User用戶

解釋:

  1. UTS:每個(gè)UTS namespace都可以有自己獨(dú)立的主機(jī)和域名
  2. IPC:每個(gè)IPC namespace內(nèi)部的進(jìn)程可以進(jìn)行進(jìn)程間通信,但是不能跨越IPC namespace進(jìn)行通信,在邏輯上這算跨主機(jī)通信
  3. PID:每個(gè)PID namespace都有自己獨(dú)立的進(jìn)程pid系統(tǒng),不同的PID namespace可以出現(xiàn)相同的pid
  4. NetWork:每個(gè)NetWork namespace都有自己獨(dú)立的網(wǎng)絡(luò)設(shè)備,IP地址,路由表,端口號(hào)等
  5. Mount:每個(gè)Mount namespace有自己的文件系統(tǒng),互相不能看到對(duì)方的文件
  6. User:每個(gè)User namespace都有自己獨(dú)立的用戶和用戶組

相關(guān)命令

dd

dd可以從指定輸入流讀取數(shù)據(jù),并輸出到指定輸出流。

參數(shù):

  • if=文件名:從指定文件讀取數(shù)據(jù),如果不指定,則默認(rèn)從標(biāo)準(zhǔn)輸入讀取
  • of=文件名:輸出數(shù)據(jù)到指定文件,如果不指定,則默認(rèn)輸出到標(biāo)準(zhǔn)輸出
  • bs=xxx:設(shè)定一個(gè)塊block的大小
  • coun=blocks:僅僅從輸入流拷貝blocks個(gè)塊,結(jié)合上一個(gè)參數(shù),可以指定要讀取的數(shù)據(jù)個(gè)數(shù)

創(chuàng)建一個(gè)指定大小的空文件:

dd if=/dev/zero of=test.txt bs=1M count=80

以上指令,就是創(chuàng)建了一個(gè)80M的空文件,輸入流是/dev/zero,這是一個(gè)會(huì)不斷產(chǎn)生空白字符的文件,也就是ASCII中字符編碼為0的字符。使用這個(gè)文件作為輸入流,可以快速初始化一個(gè)空文件。

在這里插入圖片描述

可以看到,最后創(chuàng)建了一個(gè)大小為83886080 byte的文件,其實(shí)就是80 M。


mkfs

mkfs用于在設(shè)備上創(chuàng)建一個(gè)文件系統(tǒng),俗稱格式化。

mkfs [option] filesys [blocks]

選項(xiàng):

  • -t:要?jiǎng)?chuàng)建的文件系統(tǒng)類型,比如ext3、ext4

其中filesys是被格式化的文件,而block是文件系統(tǒng)的磁盤塊數(shù),可以省略。

把剛才創(chuàng)建的文件進(jìn)行格式化:

mkfs -t ext4 test.txt

在這里插入圖片描述

這樣就把剛才的空文件進(jìn)行了格式化,變成了一個(gè)文件系統(tǒng)。


df

df用于顯示Linux中的文件系統(tǒng)磁盤使用情況。

選項(xiàng):

  • -h:以更加可視化的形式輸出,默認(rèn)情況下數(shù)據(jù)以字節(jié)為單位,加上該選項(xiàng)后,會(huì)自動(dòng)轉(zhuǎn)化為GBMB等單位
  • -T:顯示文件系統(tǒng)的類型

在這里插入圖片描述

查看當(dāng)前的文件系統(tǒng),可以看到,其不包含剛才格式化的test.txt,因?yàn)樗皇且粋€(gè)被格式化的文件,還沒(méi)有被掛載。


mount

mount用于掛載文件系統(tǒng),相當(dāng)于給文件系統(tǒng)一個(gè)訪問(wèn)入口。

比如說(shuō)你在電腦上插入一個(gè)U盤,它往往會(huì)顯示為E盤或者其它盤符。這個(gè)盤符就是一個(gè)訪問(wèn)入口,因?yàn)閁盤本身就是一個(gè)文件系統(tǒng),如果想要訪問(wèn)這個(gè)文件系統(tǒng)的內(nèi)容,Windows自然要提供一個(gè)入口,因此它自動(dòng)分配一個(gè)E盤,讓用戶可以通過(guò)E盤訪問(wèn)U盤。

同樣的,剛才格式化test.txt為一個(gè)文件系統(tǒng),現(xiàn)在要將其掛載起來(lái),才能訪問(wèn)這個(gè)文件系統(tǒng)。

mount [option] device dir
  • device:被掛載的文件
  • dir:掛載到的位置

選項(xiàng):

  • -t:掛載文件的類型,比如ext3、ext4,但是可以不填,mount會(huì)自動(dòng)識(shí)別文件系統(tǒng)的類型

把剛才的test.txt掛載到當(dāng)前/mymount目錄下:

在這里插入圖片描述

首先創(chuàng)建一個(gè)空目錄/mymount,隨后把test.txt掛載到這個(gè)目錄下,隨后可以看到,/mymount出現(xiàn)了新的內(nèi)容。

隨后通過(guò)df -t ext4查看系統(tǒng)的文件系統(tǒng),可以看到/dev/loop0文件系統(tǒng),被掛載到了/mymount下,說(shuō)明成功掛載了一個(gè)文件系統(tǒng)。

如果想要?jiǎng)h除這個(gè)文件系統(tǒng),可以執(zhí)行:

umount /mymount

以上所有命令,是在完成一個(gè)文件系統(tǒng)的創(chuàng)建,便于后續(xù)測(cè)試文件系統(tǒng)的隔離性。

接下來(lái)看看Linux提供的創(chuàng)建namespace的命令:

unshare

unshare用于執(zhí)行一個(gè)進(jìn)程,并且為這個(gè)進(jìn)程提供一個(gè)獨(dú)立的namespace。

unshare [option] program 
  • program:要執(zhí)行的程序

選項(xiàng):

  • -i --ipc:不共享IPC空間
  • -m --mount:不共享Mount空間
  • -n --net:不共享Net空間
  • -p --pid:不共享PID空間
  • -u --uts:不共享UTS空間
  • -U --user:不共享用戶空間
  • --fork:創(chuàng)建一個(gè)子進(jìn)程執(zhí)行program
  • --mount-proc:掛載一個(gè)新的/proc到命名空間內(nèi)

此處這個(gè)--fork有一點(diǎn)點(diǎn)繞,因?yàn)?code>ushare這個(gè)命令,本身也是一個(gè)進(jìn)程,是在宿主機(jī)環(huán)境運(yùn)行的。

如果直接執(zhí)行unshare,流程如下:

  1. unshare 創(chuàng)建一個(gè)新的命名空間
  2. unshare 執(zhí)行 program,但是沒(méi)有創(chuàng)建新的進(jìn)程,而是直接用 program 替換了 unshare 本身

在這里插入圖片描述

以上unshare不帶有--fork參數(shù),執(zhí)行了/bin/bash進(jìn)程。進(jìn)入namespace后,可以看到,/bin/bash的父進(jìn)程是-bash。這個(gè)-bash就是宿主機(jī)的bash進(jìn)程。因?yàn)?code>unshare是在bash中執(zhí)行的,所以unshare的父進(jìn)程是-bash。最后將/bin/bash替換unshare/bin/bash的父進(jìn)程就是原先的父進(jìn)程-bash。

這種情況下,看不到unshare進(jìn)程,因?yàn)?code>/bin/bash就是原先的unshare。

如果加上--fork參數(shù),流程如下:

  1. unshare 創(chuàng)建一個(gè)新的命名空間
  2. unshare 在新的命名空間中創(chuàng)建一個(gè)新的子進(jìn)程來(lái)執(zhí)行 program。
  3. unshare本身不退出

在這里插入圖片描述

加上--fork參數(shù)后,/bin/bash的父進(jìn)程就變成了unshareunshare的父進(jìn)程是-bash。也就是說(shuō)unshare創(chuàng)建了一個(gè)子進(jìn)程來(lái)執(zhí)行program,而不是親自執(zhí)行program。

如果你跟著操作了,此時(shí)還處于namespace中,要通過(guò)exit來(lái)退出,不然會(huì)影響后續(xù)操作。


進(jìn)程隔離

現(xiàn)在嘗試進(jìn)行進(jìn)程隔離,也就是隔離,通過(guò)--pid選項(xiàng)完成:

unshare --fork --pid --mount-proc /bin/bash

以上命令,用于創(chuàng)建一個(gè)新的PID命名空間,并執(zhí)行bash進(jìn)程,也就是執(zhí)行一個(gè)新的命令行。

此處要加上--fork選項(xiàng),因?yàn)橐M(jìn)行進(jìn)程隔離,而unshare本身是宿主機(jī)的進(jìn)程,如果直接讓unshare本身去執(zhí)行program,那么program就不在新的namespace中,導(dǎo)致錯(cuò)誤。

在這里插入圖片描述

以上示例中,因?yàn)闆](méi)有加上--fork,報(bào)錯(cuò)了。

如果只加上--fork選項(xiàng),此時(shí)還是不能觀察到進(jìn)程隔離。因?yàn)?code>top、ps等進(jìn)程監(jiān)控的命令,是依賴于/proc/PID這個(gè)目錄的。但是命令沒(méi)有進(jìn)行文件系統(tǒng)隔離,所以還是會(huì)使用宿主機(jī)的/proc/PID目錄,導(dǎo)致namespace內(nèi)部可以看到外部的進(jìn)程。

為此,unshare命令專門提供了一個(gè)參數(shù)--mount-proc,在新的namespace掛載一個(gè)獨(dú)立的/proc目錄,方便進(jìn)行進(jìn)程的監(jiān)控。

進(jìn)程隔離結(jié)果:

在這里插入圖片描述

可以看到,創(chuàng)建了新的namespace后,ps -aux只能查到兩個(gè)進(jìn)程,一個(gè)是bash,一個(gè)是grep。這就將namespace內(nèi)部的進(jìn)程與宿主機(jī)的進(jìn)程隔離開了。


文件隔離

想要進(jìn)行文件隔離,創(chuàng)建一個(gè)新的namespace,然后在里面創(chuàng)建一個(gè)文件系統(tǒng)并掛載。再在外部的宿主機(jī)查看是否可以看到這個(gè)文件系統(tǒng)。

  1. 創(chuàng)建一個(gè)新的文件隔離命名空間
unshare --mount --fork /bin/bash
  1. 創(chuàng)建一個(gè)指定大小的空文件
dd if=/dev/zero of=data.img bs=1M count=80
  1. 格式化文件為文件系統(tǒng)
mkfs -t ext4 data.img
  1. 掛載文件系統(tǒng)
mkdir /mymount
mount -t ext4 data.img /mymount

在這里插入圖片描述

最后通過(guò)df -t ext4,可以看到文件系統(tǒng)已經(jīng)掛載成功了。

打開一個(gè)新的終端,執(zhí)行df -t ext4

在這里插入圖片描述

此時(shí)左右終端看到的文件系統(tǒng)不同,左側(cè)的namespace內(nèi)掛載的新文件系統(tǒng),右側(cè)終端看不到了,這就是文件隔離。

此時(shí)在namespace中執(zhí)行exit,就會(huì)退出這個(gè)bash,進(jìn)而退出namespace,在其內(nèi)部創(chuàng)建的文件,掛載的文件系統(tǒng)都會(huì)自動(dòng)銷毀。

在這里插入圖片描述

當(dāng)exit退出后,再次查看文件系統(tǒng),也找不到剛才掛載的文件系統(tǒng)了。這和剛才兩個(gè)終端的情況不同,之前是不同namespace之間的文件隔離,而此處是退出namespace后,文件系統(tǒng)已經(jīng)被銷毀了。


CGroup

cgroup的可以把一系列任務(wù),也就是進(jìn)程劃分到一個(gè)任務(wù)組,并且限制一個(gè)任務(wù)組的資源占用。比如可以限制一系列任務(wù)最多占用多少CPU,占用多少內(nèi)存等等。

也就是說(shuō),namespace完成了不同容器之間環(huán)境的隔離,而cgroup完成了每個(gè)容器資源的訪問(wèn)限制。

相關(guān)命令

為了方便測(cè)試CPU與內(nèi)存壓力,此處使用兩個(gè)工具分別完成產(chǎn)生壓力以及壓力檢測(cè)。

pidstat

pidstat用于檢測(cè)一個(gè)進(jìn)程的CPU、內(nèi)存、IO、線程等等資源的占用情況。

需要下載:

apt install sysstat

語(yǔ)法:

pidstat [option] [時(shí)間間隔] [次數(shù)]

選項(xiàng):

  • -u:檢測(cè)CPU使用情況,默認(rèn)就是該選項(xiàng)
  • -r:檢測(cè)內(nèi)存使用情況
  • -d:檢測(cè)IO使用情況
  • -p:指定進(jìn)程pid,如果指定ALL則監(jiān)視所有進(jìn)程
  • -C:檢測(cè)通過(guò)指定命令啟動(dòng)的進(jìn)程

直接執(zhí)行pidstat

在這里插入圖片描述

此時(shí)會(huì)輸出所有進(jìn)程,默認(rèn)輸出CPU占用情況,也就是%CPU這一欄。

通過(guò)-p指定進(jìn)程:

在這里插入圖片描述

通過(guò)-C指定進(jìn)程:

在這里插入圖片描述

此處指定bash進(jìn)程。

通過(guò)-r檢測(cè)內(nèi)存:

在這里插入圖片描述

此處%MEM欄就是內(nèi)存占用情況。

指定檢測(cè)次數(shù)與頻率:

在這里插入圖片描述

此處的1 3表示:每隔一秒檢測(cè)一次,一共檢測(cè)三次。


stress

stress是一個(gè)壓力測(cè)試工具,可以對(duì)CPU、內(nèi)存IO等進(jìn)行壓力測(cè)試。

這個(gè)工具也要下載:

apt install stress

語(yǔ)法:

stress [option]

參數(shù):

  • -c --cpu N:產(chǎn)生N個(gè)進(jìn)程,每個(gè)進(jìn)程都循環(huán)調(diào)用sqrt函數(shù)產(chǎn)生CPU壓力
  • -m --vm N:產(chǎn)生N個(gè)進(jìn)程,每個(gè)進(jìn)程都循環(huán)調(diào)用malloc free函數(shù),產(chǎn)生內(nèi)存壓力

示例:

在這里插入圖片描述

左側(cè)使用stress創(chuàng)建了一個(gè)進(jìn)程進(jìn)行CPU壓力輸出,右側(cè)檢測(cè)stress產(chǎn)生的壓力,結(jié)果一個(gè)進(jìn)程占滿了100%的CPU資源。


cgroup控制

接下來(lái)看看如何操作cgroup,它并沒(méi)有現(xiàn)成的指令來(lái)控制,而是需要操控配置文件來(lái)完成。

/proc/cgroups查看cgroup支持的資源控制:

在這里插入圖片描述

/proc/cgroups文件中,包含了cgroup所支持的資源控制的類型,比如CPU、內(nèi)存等。

查看cgroup掛載信息:

mount | grep cgroup

在這里插入圖片描述

這里就是每一個(gè)資源的控制目錄,比如在/sys/fs/cgroup/cpu目錄下,就是控制CPU資源的配置文件。


內(nèi)存控制

創(chuàng)建一個(gè)內(nèi)存的控制組很簡(jiǎn)單,跳轉(zhuǎn)到目錄/sys/fs/cgroup/memory,然后創(chuàng)建一個(gè)目錄:

在這里插入圖片描述

此處創(chuàng)建了一個(gè)test_memory目錄,這就算創(chuàng)建了一個(gè)test_memory內(nèi)存控制組。進(jìn)入目錄后,可以看到這個(gè)目錄被初始化了很多文件,其中memory.limit_in_bytes這個(gè)文件,就是這個(gè)cgroup可以使用的最大內(nèi)存數(shù)目,以字節(jié)為單位。

想要限制這個(gè)cgroup的最大內(nèi)存數(shù)量,直接往文件寫入數(shù)據(jù)即可:

echo "20971520" > memory.limit_in_bytes

此處20971520其實(shí)就是20 mb,此后這個(gè)cgroup的最大內(nèi)存占用就不會(huì)超過(guò)20 mb。

那么要如何把一個(gè)進(jìn)程加入控制組?這里有一個(gè)task文件,只需要把進(jìn)程的PID寫入到這個(gè)文件中,那么一個(gè)進(jìn)程就算加入了這個(gè)cgroup

在這里插入圖片描述

如圖,創(chuàng)建一個(gè)進(jìn)程,占用50m的內(nèi)存:

stress -m 1 --vm-bytes 50m

隨后在另一個(gè)端口通過(guò)pidstat查看stressPID,為1507015069,其中15069是控制進(jìn)程,15070是真正在產(chǎn)生內(nèi)存壓力的進(jìn)程。將15070寫入tasks文件中,讓其加入cgroup

結(jié)果左側(cè)的stress退出了,無(wú)法產(chǎn)生50m的壓力。這是因?yàn)橐婚_始就限制了cgroup只能占用最多20 m的內(nèi)存。一旦進(jìn)程加入后,就會(huì)受到限制,從而崩潰。


CPU控制

創(chuàng)建一個(gè)CPU的控制組也一樣,跳轉(zhuǎn)到目錄/sys/fs/cgroup/cpu,然后創(chuàng)建一個(gè)目錄:

在這里插入圖片描述

此處創(chuàng)建了一個(gè)test_cpu目錄,也就死和創(chuàng)建了一個(gè)test_cpuCPU控制組。這個(gè)目錄同樣被初始化了很多文件。

其中控制CPU占用的是cpu.cfs_period_uscpu.cfs_quota_us,這兩個(gè)文件共同完成CPU資源限制。其中cpu.cfs_period_us作為分母,cpu.cfs_quota_us作為分子,以百分比的形式限制CPU。

比如cpu.cfs_period_us內(nèi)填入5000cpu.cfs_quota_us內(nèi)填入2000。那么該cgroup最多可以占用2000/5000也就是40%的CPU資源。要注意的是,這兩個(gè)文件的最小值都是1000,不允許使用比1000更小的數(shù)字進(jìn)行配置。另外的cpu.cfs_quota_us的默認(rèn)值為-1,表示可以占用100%的CPU。

另一個(gè)就是tasks文件,同樣的只要把PID寫入這個(gè)文件,就算加入了這個(gè)CPU控制組。

啟動(dòng)一個(gè)stress進(jìn)程:

在這里插入圖片描述

由于stress本身就會(huì)盡可能占滿CPU,右側(cè)輸出窗口每隔一秒輸出stress的狀態(tài),其一直保持100%的CPU資源占用。

左下角窗口先限制了test_cpu這個(gè)控制組的CPU最大占用率是2000/10000,也就是20%。

隨后把stress的PID20849寫入tasks

在這里插入圖片描述

寫入后,從右邊的窗口可以看出,stress的CPU占用率立馬下降,100%37%最后穩(wěn)定在20%

可以cgroup成功對(duì)進(jìn)程的CPU進(jìn)行了限制。


容器化技術(shù)在Linux中基于namespacecgroup實(shí)現(xiàn),namespace完成不同容器之間的環(huán)境隔離,而cgroup完成多個(gè)容器對(duì)資源的占用限制,合理分配資源。這就是容器化技術(shù),以及docker的最基本原理,也是底層依賴。


http://www.risenshineclean.com/news/23271.html

相關(guān)文章:

  • 什么網(wǎng)站可以做微官網(wǎng)市場(chǎng)調(diào)研的四個(gè)步驟
  • 北京網(wǎng)站制作公司興田德潤(rùn)實(shí)惠軟件開發(fā)培訓(xùn)
  • ps做分享類網(wǎng)站效果圖地推接單平臺(tái)app排行榜
  • 營(yíng)業(yè)執(zhí)照怎么做增項(xiàng) 在網(wǎng)站上操作網(wǎng)站搭建公司
  • 學(xué)網(wǎng)站建設(shè)多久能學(xué)會(huì)每天4元代發(fā)廣告
  • 建設(shè)網(wǎng)站程序百度seo關(guān)鍵詞排名優(yōu)化軟件
  • 集群注冊(cè)的公司可以做網(wǎng)站備案深圳互聯(lián)網(wǎng)公司排行榜
  • 莘縣網(wǎng)站建設(shè)電話一諾網(wǎng)絡(luò)推廣公司
  • 太原做網(wǎng)站公司運(yùn)營(yíng)長(zhǎng)沙網(wǎng)絡(luò)推廣小公司
  • win7 iis配置asp.net網(wǎng)站品牌營(yíng)銷策略分析
  • wordpress做圖片站網(wǎng)站建設(shè)深圳公司
  • 國(guó)外好的網(wǎng)站空間最近10條重大新聞
  • 國(guó)家官方網(wǎng)站seo關(guān)鍵詞排名優(yōu)化app
  • h5都用什么網(wǎng)站廣州百度seo 網(wǎng)站推廣
  • 怎樣自創(chuàng)網(wǎng)站寧波網(wǎng)站推廣優(yōu)化公司電話
  • 畢業(yè)設(shè)計(jì)軟件開發(fā)網(wǎng)站開發(fā)手機(jī)做網(wǎng)頁(yè)的軟件
  • 網(wǎng)站上的圖片帶店面是怎么做的怎么做市場(chǎng)推廣
  • 建立企業(yè)網(wǎng)站要多少錢足球比賽統(tǒng)計(jì)數(shù)據(jù)
  • 公司注冊(cè)網(wǎng)站官網(wǎng)電商如何推廣自己的產(chǎn)品
  • 網(wǎng)站開發(fā)的安全性原則優(yōu)化關(guān)鍵詞的作用
  • ubuntu wordpress 安裝成都網(wǎng)站優(yōu)化公司
  • 湖南做網(wǎng)站 要上磐石網(wǎng)絡(luò)seo網(wǎng)站有哪些
  • 自己買主機(jī)可以做網(wǎng)站嗎windows優(yōu)化工具
  • 想做一個(gè)什么樣的網(wǎng)站衡水seo優(yōu)化
  • 溫州建設(shè)seo搜索引擎優(yōu)化是什么意思
  • 東莞市網(wǎng)站公司海淀區(qū)seo搜索引擎優(yōu)化企業(yè)
  • 建網(wǎng)站大公司廈門人才網(wǎng)招聘官網(wǎng)
  • 旅游找什么網(wǎng)站好小程序開發(fā)平臺(tái)
  • 網(wǎng)上做賭博網(wǎng)站駕校推廣網(wǎng)絡(luò)營(yíng)銷方案
  • 山東省建設(shè)廳網(wǎng)站地址一個(gè)新手怎么做推廣