<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          容器技術(shù)基石:Linux namespace 和 cgroups,運(yùn)維了解一下

          共 1199字,需瀏覽 3分鐘

           ·

          2022-02-25 19:49

          先放結(jié)論,namespace 是用來(lái)做資源隔離, cgroup 是用來(lái)做資源限制。

          Namespace

          先說(shuō)Namespace,虛擬技術(shù)基本要求就是資源隔離,簡(jiǎn)單的說(shuō)就是我獨(dú)占當(dāng)前所有的資源。比如我在 8080 端口起 web 服務(wù)器,不用擔(dān)心其他進(jìn)程端口占用。Linux 自帶 namespace 就能達(dá)到這個(gè)目的。namespace 從2002 開(kāi)始開(kāi)發(fā)到現(xiàn)在已經(jīng)快20年的歷史了,到現(xiàn)在一共有6種 namespace:

          • mnt, 文件系統(tǒng)

          • pid, 進(jìn)程

          • net, 網(wǎng)絡(luò)

          • ipc, 系統(tǒng)進(jìn)程通信

          • uts, hostname

          • user, 用戶(hù)

          可以通過(guò)三個(gè)系統(tǒng)調(diào)用的方式

          • clone,創(chuàng)建新的進(jìn)程和新的namespace,新創(chuàng)建的進(jìn)程 attach 到新創(chuàng)建的 namespace

          • unshare,不創(chuàng)建新的進(jìn)程,創(chuàng)建新的 namespace 并把當(dāng)前進(jìn)程 attach 上

          • setns, attach 進(jìn)程到已有的 namespace 上

          shell 也提供了一個(gè)和系統(tǒng)調(diào)用同名的 unshare 命令可以非常簡(jiǎn)單的創(chuàng)建 namespace。

          sudo unshare --fork --pid --mount-proc bash

          這樣創(chuàng)建了一個(gè)新的 PID namespace 并在里面運(yùn)行了 bash。我們看看當(dāng)前 namespace 的進(jìn)程

          在這個(gè) namespace 里,就只有兩個(gè)進(jìn)程了。

          Cgroups

          cgroups 是 control groups 控制組的意思, 可以通過(guò)文件系統(tǒng)來(lái)訪問(wèn)這些信息。一般cgroups 掛載在?/sys/fs/cgroup

          內(nèi)核會(huì)讀取這些信息來(lái)調(diào)度資源分配給每個(gè)進(jìn)程。比如我要限制進(jìn)程占用CPU的時(shí)間。我用 Go 寫(xiě)了一個(gè)模擬高 CPU 的代碼。

          func IsPrime(value int) bool {    for i := 2; i <= int(math.Floor(float64(value)/2)); i++ {        if value%2 == 0 {            return false        }    }    return true}
          func main() { for i := 0; i < 999999999; i++ { fmt.Printf("%v is prime: %v\n", i, IsPrime(i)) }}

          我創(chuàng)建兩個(gè) CPU 的 cgroups

          sudo cgcreate -g cpu:/cpulimitedsudo cgcreate -g cpu:/lesscpulimited


          cpu.shares 是給內(nèi)核為每個(gè)進(jìn)程決定 CPU 計(jì)算資源,默認(rèn)值是1024。給 cpulimited 設(shè)置為 512,lesscpulimited 保留默認(rèn)值,那么在這兩個(gè)組的進(jìn)程會(huì)以1 :2的比例占用CPU。

          sudo cgset -r cpu.shares=512 cpulimited

          我們來(lái)驗(yàn)證一下。

          在 cpulimited 起一個(gè)進(jìn)程

          sudo cgexec -g cpu:cpulimited ./main > /dev/null &

          可以看到獨(dú)占了 100% 的 CPU,在 cpulimited 再起一個(gè)進(jìn)程

          兩個(gè)進(jìn)程都在 cpulimited,各占50%的 CPU。在 lesscpulimited 起一個(gè)進(jìn)程

          sudo cgexec -g cpu:lesscpulimited ./main > /dev/null &

          兩個(gè) cpulimited 進(jìn)程的 CPU 之和 與 一個(gè) lesscpulimited 進(jìn)程的 CPU 差不多就是 1:2的關(guān)系。

          來(lái)源:https://zhuanlan.zhihu.com/p/55099839

          文章轉(zhuǎn)載:高效運(yùn)維

          (版權(quán)歸原作者所有,侵刪)


          點(diǎn)擊下方“閱讀原文”查看更多

          瀏覽 56
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品熟妇一区二区三区四区 | 色色爱爱 | 91青青草视频在线 | 伊人黄色网| 欧美A∨在线观看 |