cgroup使用過程的一些問題


關於cgroup的介紹:http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt

目的是控制進程間資源的競爭,資源包括CPU,MEMORY,IO,DEVICE等。

 

內核版本:2.6.32-131.6.1

普通的信息網上到處都找得到,比如如何進行最簡單的測試,但是一旦碰到問題,就發現信息太少了,記錄下其中碰到的幾個問題:

1. 在多核cpu中,兩個進程會各自占用獨立的cpu,這時候cpu.shares的設置是無效的,需要使用cpuset限制進程的cpu親緣性

2. 在使用cpuset進行task寫入的時候,可能會碰到no sapce left,原因是當前機器只有memory node或者kernel在編譯的時候是按照一個memory node編譯的,這個時候需要將0寫入/cgroup/cpuset/group-name/cpuset.mems,以指示使用0號內存節點

3. 如果碰到permission denied,一個原因是shell使用錯誤,比如sudo echo "x" >> y 並沒有真正按照root執行echo,需要寫成sudo bash -c 'echo "x">y',具體原因google 一大堆。

4. 對於多線程的程序,cpu限制很困難,因為這個時候將進程pid寫入tasks是沒用的,linux會將每個線程當做進程對待,結果就是仍然控制不住各個進程內線程的使用,有三個辦法解決:

    a. 將啟動進程的shell pid加入tasks,sudo bash -c "echo $$ > /cgroup/cpuset/group-name/tasks"

    b. 將TGID(就是PID)寫入cgroups.procs,需要升級到RHEL6(沒試驗,不想裝系統了);對於低版本內核,報

bash: line 0: echo: write error: Invalid argument錯誤。

    c. 使用libcgroup規則引擎將所有thread id加入tasks


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM