调度-资源隔离
我們如何讓計算任務的進程能受限制的使用機器資源呢,這里不僅指占用某臺機器的粗粒度使用,也指對某臺機器的CPU/內存/帶寬/硬盤的細粒度限制。
資源限制和資源控制看上去差不多,但是我們接下來會發現他們的區別。
資源調度有兩種解決方案:限制方式和控制方式。
所謂限制方式,也就是有個虛擬的容器限制,進程無法使用更多的資源。
Lxc、Cgroup的實現是一種限制方式,通過虛擬化或者輕量級虛擬化限制資源的使用,后面7.4.2談到的Mesos也是這種方式。
Cgroup是Linux內核提供的一個操作系統層面的資源控制組,通過對進程組(process groups)的資源進行分配和使用限制達到目的。該項技術最初也是Google工程師發明,目前成為lxc(輕量級虛擬化容器)的重要組成技術。
Cgroup提供了對進程組可以使用的資源數量限制、優先級控制、進程組使用的資源數量記錄(進程組使用的CPU時間)、進程組隔離、進程組掛起和恢復等功能。
Cgroup的一些主要子系統如下:
? Blkio:這個子系統為塊設備設定輸入/輸出限制,比如物理設備(磁盤、固態硬盤、USB等等)。
? Cpu:這個子系統使用調度程序提供對CPU的Cgroup任務訪問。
? Cpuacct:這個子系統自動生成Cgroup中任務所使用的CPU報告。
? Cpuset:這個子系統為Cgroup中的任務分配獨立CPU(在多核系統)和內存節點。
? Devices:這個子系統可允許或者拒絕Cgroup中的任務訪問設備。
? Freezer:這個子系統掛起或者恢復Cgroup中的任務。
? memory:這個子系統設定Cgroup中任務使用的內存限制,并自動生成由那些任務使用的內存資源報告。
? net_cls:這個子系統使用等級識別符(Classid)標記網絡數據包,可允許Linux流量控制程序(tc)識別從具體Cgroup中生成的數據包。
? Ns:名稱空間子系統。
? Cgroup啟動是通過Cgconfig完成的:
#/etc/init.d/cgconfig start
#/etc/init.d/cgconfig stop
顯示已經存在的子系統:
cpu /cgroup/cpu
創建一個新的Cgroup:
cgcreate -g cpu,net_cls:/mygroup
通過cgclassify命令將進程移到Cgroup中:
cgclassify -g cpu,memory:group1 1701
或者通過cgexec命令在Cgroup中啟動進程:
cgexec -g cpu:group1 lynx?
Cgroup詳細的使用可參見Linux官方文檔http://www.redhat.com。
另一種是控制方式,進程實際上可以用更多的資源,但是我們通過監控的手段,根據資源使用狀況,控制住進程的啟動。
通過JVM或者其他系統監控API,對CPU內存使用情況進行獲取并控制,早期的Hadoop對內存的控制也是該方式。
Java的MemoryPoolMXBean機制可以很好地設置使用內存的閥值,并在內存不足時進行事件通知,并將任務分配到其他Java虛擬機,然后停止接受任務,內存足夠后再重新恢復接收任務。這個機制是可以用來實現內存隔離的(不能像Cgroup那樣隔離,但是可以做到控制)。另外,OperatingSystemMXBean機制可以支持線程和Java虛擬機進行CPU時間檢測(包括用戶CUP時間和系統CPU時間),通過CPU檢測可以對占用率高的時刻停止接收任務。
遺憾的是,Java本身對系統層面的監控力度支持還是不太理想,沒有太好的做法。很多老外推薦使用開源軟件Sigar(System Information Gatherer And Reporter)來彌補Java本身在這塊的不足,Sigar提供了跨平臺的系統信息收集的API,包括:
? CPU信息,包括基本信息(vendor、model、mhz、cacheSize)和統計信息(user、sys、idle、nice、wait)。
? 文件系統信息,包括Filesystem、Size、Used、Avail、Use%、Type。
? 事件信息,類似Service Control Manager。
? 內存信息,物理內存和交換內存的總數、使用數、剩余數;RAM的大小。
? 網絡信息,包括網絡接口信息和網絡路由信息。
? 進程信息,包括每個進程的內存、CPU占用數、狀態、參數、句柄。
? IO信息,包括IO的狀態,讀寫大小等。
? 服務狀態信息。
? 系統信息,包括操作系統版本,系統資源限制情況,系統運行時間以及負載,Java的版本信息等。
轉載于:https://www.cnblogs.com/muzinan110/p/11052064.html
總結
- 上一篇: Arduino学习笔记⑦ EEPROM断
- 下一篇: zookeeper单机安装