實驗環境 ubuntu 18.10
作業系統已經預設把各種controller都掛載到/sys/fs/cgroup/目錄下了。
ls /sys/fs/cgroup/ 可以檢視有哪些controller
mount |grep cgroup 可以檢視掛載資訊 (可以看到有乙個是cgroup2,其它都是cgroup1,顯示為cgroup)
1、先寫乙個占用記憶體的普通程式。
手工執行這個程式,用top -p pid可以看到這個程式最終使用1000mb記憶體(34%)
package main
import "time"
import "os"
func main()
time.sleep(30 * time.second)
}
2、寫乙個測試程式,呼叫上面的程式cmd2. 然後建立乙個cgroup,名字為gfmemory。寫入cmd2的pid到tasks檔案,寫入記憶體門限到 memory.limit_in_bytes 檔案。
切換到root使用者,執行這個測試程式。通過top -p pid可以看到cmd2的記憶體被限制在100mb左右。(3.3%)
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strconv"
// "syscall"
)// uts namespace 主要用來隔離 nodename 和 domainname 兩個系統標識。在 uts namespace
// 裡面 , 每個 namespace 允許有自己的 hostname 。
// ipc namespace 用來隔離 system v ipc 和 posix message queues 。ipcs -q ; ipcmk -q ; ipcrm -q 0
// pid namespace 是用來隔離程序 id 的 。
// mount namespace 用來隔 離各個程序看到 的掛載點檢視。
func main()
cmd.stdin = os.stdin
cmd.stdout = os.stdout
cmd.stderr = os.stderr
if merr := cmd.start(); merr != nil
path := "/sys/fs/cgroup/memory/gfmemory"
println(path)
if err := os.mkdir(path, 0755); err != nil
println("write tasks:", cmd.process.pid)
ioutil.writefile(path+"/tasks", byte(strconv.itoa(cmd.process.pid)), 0644)
ioutil.writefile(path+"/memory.limit_in_bytes", byte("100m"), 0644)
cmd.process.wait()
}
自己動手寫docker 2
2.1 linux namespace linux 支援的namespace namespace api的基本系統呼叫 不完整的ex,以下為呼叫後截圖為 package main import log os os exec syscall func main syscall.credential c...
自己動手寫bootloader
原始出處 作者資訊和本宣告。否則將追究法律責任。為了寫乙個bootloader讓板子跑起來,首先我們要知道bootloader是個什麼東東才行。簡單的說,bootloader就是乙個引導核心啟動的一段小 也就是說當啟動完核心之後,它的使命就已經結束。bootloader生命週期 初始化硬體 設定啟動...
自己動手寫CMS
簡易的cms外掛程式,可供借鑑或者擴充套件 流程 定義內容 分類與組織內容 儲存內容 操作控制內容 定義內容 制定目標 確定需要的內容型別 目標使用者定位 確定目標使用者需要何種技術 分類與組織內容 按內容所屬的邏輯層級關係來劃分 按內容的種類來劃分,比如video text audio等等 儲存內...