RHEL7系統管理之資源管理

来源:https://www.cnblogs.com/qiyunshe-NSD1805/archive/2018/09/06/9588241.html
-Advertisement-
Play Games

1. CGroup(控制群組)、slice(切片)、scop、service 控制群組(control group)是linux kernel的一項功能, 該功能允許linux對RHEL7中systemd下掛載的所有進程按類別分組, 從而使得系統管理員可以按需對linux的系統資源(如CPU時間、系 ...


1. CGroup(控制群組)、slice(切片)、scop、service

  控制群組(control group)是linux kernel的一項功能, 該功能允許linux對RHEL7中systemd下掛載的所有進程按類別分組, 從而使得系統管理員可以按需對linux的系統資源(如CPU時間、系統記憶體、網路帶寬、磁碟IO等)進行合理分配. 通過CGroup進行系統資源切片(slice), 系統管理員可以在分配、排序、拒絕、管理和監控系統資源等方面, 進行精細化控制, 使硬體資源在應用程式和用戶之間合理分配, 最大限度挖掘系統軟硬體性能.

  CGroup的操作對象slice、scope、service 是由systemd自動創建的. RHEL7中運行的所有進程都是systemd的子進程, systemd創建的進程(實際是用戶發出操作指令,systemd按照指令創建進程)會由systemd按照相應的指令參數分配到對應的slice、scope、service中,該進程將得到CGroup事先分配好的各種系統資源(特殊情況下,系統管理員為給特定程式或進程組優先分配系統資源,通常會單獨為該進程組創建或優化系統資源切片(slice)).

2. linux Kernel的資源管控器

  資源管控器(CGroup子系統)更直觀的概念類似於windows中的控制面板,但是資源管控器在linux中可調校的參數更多,管理更複雜.

  RHEL7中systemd預設啟用了以下管控器:

  blkio —— 對輸入/輸出訪問存取塊設備設定許可權;

  cpu —— 使用CPU調度程式讓CGroup的任務可以存取CPU, 與CPUACCT管控器一起掛載在同一個mount上;

  cpuset —— 給cgroup中的任務分配獨立CPU和記憶體節點;

  devices —— 允許或禁止cgroup中的任務存取設備;

  freezer —— 暫停或恢復cgroup中的任務;

  memory —— 限制cgroup中任務可用記憶體, 並且自動生成任務占用記憶體資源的報告;

  net_cls —— 使用等級識別符(classid)標記網路數據包,使linux的流量控制器(tc指令)可以識別來自特定cgroup的任務數據包;

  perf_event —— 允許使用perf工具來監控cgroup;

  hugetlb —— 允許使用大的虛擬記憶體頁,並且給這些記憶體頁強制設定可用資源量.

3. 管理控制群組(cgroup)

(1)創建控制群組

  systemd-run命令用於創建、啟動臨時的service或scope, 併在此單位中運行自定義指令. 在service單位中執行的指令在後臺非同步啟動, 由systemd進程調用.在scope單位中運行的指令直接從systemd-run進程中啟動,繼承systemd的執行狀態.

systemd-run --unit=<name> --scope --slice=<slice_name> <command>

  name 自定義單位名稱. 如果不指定--unit,系統會自動生成一個.

  --scope 創建臨時scope單位. 如果不指定,系統預設創建的是service單位.

  --slice選項, 新建一個資源切片. 如果不指定名稱, 系統會預設將創建的 .service或 .scope掛載到system.slice.

  command 將要在新建的 slice-scope或slice-service中運行的指令.

  下圖是在同一個slice中分別運行了兩個top命令,一個指定掛載到scope; 一個沒有指定,系統預設掛載到service.

(2)刪除控制群組

systemctl stop name.service
或者
systemctl kill name.service --kill-who=pid,... --signal=signal
或者
systemctl disable name.service

  發現了什麼?很熟悉的味道!

(3)修改控制群組的單位文件

  這就是systemd依據/usr/lib/systemd/system/ 目錄下的 XXX.service 文件對進程的管理. 換句話說, 就是我們可以自行創建修改 XXX.service, 實現對進程運行資源的管理.

  例如, 要給Apache service分配1500個CPU share (預設為1024個), 可以修改/usr/lib/systemd/system/httpd.service 文件中CPU、記憶體、網路帶寬等值:

[service]
CPUShares=1500  #設定CPUShares
MenmoryLimit=1G #設定apache記憶體限制
BlockIOWeight=/usr/local/pic 750 #設定apache對/usr/local/pic目錄的IO權重
BlockIOReadBandWith=/usr/local/pic 5M #設定apache對/usr/local/pic目錄的最大讀取帶寬

重載daemon 使設定生效:

systemctl daemon-reload
systemctl restart httpd.service

(4)命令行修改進程的運行資源

  當然,還可以通過命令行設定進程的運行資源:

設定Apache https.service的CPU和記憶體占用量:
systemctl set-property httpd.service CPUShares=600 MenoryLimit=500M
利用 --runtime 選項使設定為臨時更改:
systemctl set-property --runtime httpd.service CPUShares=600 MemoryLimit=500M

  同一臺主機,kvm1中運行DB1.service, km2中運行DB.2service, 為DB1、DB2根據使用優先順序分配IO資源:

systemctl set-property DB1.service BlockIOWeight=1000
systemctl set-property DB2.service BlockIOWeight=100

  為同一臺主機中NFS和Samba服務設定網路優先順序:

1.net_prio管控器並未編譯進kernel, 使用時必須手動裝載該模塊:
~]#modprobe netprio_cgroup

2.將net_prio子系統附加到/cgroup/net_prio 的cgroup 中:
~]#mkdir sys/fs/cgroup/net_prio
~]#mount -t cgroup -o net_prio none sys/fs/cgroup/net_prio

3.為各項服務創建cgroup:
~]#mkdir sys/fs/cgroup/net_prio/nfs_high
~]#mkdir sys/fs/cgroup/net_prio/samba_low

4.將NFS服務自動移至nfs_high cgroup :
~]#echo "CGROUP_DAEMON="net_prio:nfs_high"" >> /etc/sysconfig/nfs

5.將smbd自動移至samba_low cgroup :
~]#echo "*:smbd net_prio samba_low" >> /etc/cgrules.conf

6.啟動cgred服務
~]#systemctl start cgred

7.設定NFS和samba的優先順序:
~]#echo "eth1 1" >/sys/fs/cgroup/net_prio/samba_low/net_prio.ifpriomap
~]#echo "eth1 10">/sys/fs/cgroup/net_prio/nfs_high/net_prio.ifiomap

  RHEL7的系統資源管理工具很豐富, 在RHEL7中仍然保留了早期版本的libcgroup數據包, 仍然可以啟用cgconfig服務實現系統資源的層級管理.

  後續更新RHEL7中資源管理的各種可調參數.

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 public Form1() 2 { 3 InitializeComponent(); 4 treeView1.AllowDrop = true; 5 treeView1.ItemDrag += new ItemDragEventHandler(treeView1_ItemDrag); 6 tr... ...
  • //獲取時間戳 .net framework /* DateTime dt = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); int time = (int)(DateTime.Now - dt).TotalSecon... ...
  • 版權聲明:本文為博主原創文章,未經允許不得轉載。 在平常的工作中經常在兩個伺服器之間傳輸文件,而且經常從本地遠程登錄伺服器,每次都要輸入密碼顯然很沒效率,這時候該怎麼辦呢? 首先假設伺服器A和B,要想實現從A向B複製文件或者從B獲取文件,也就是: scp -r "some files in A" B ...
  • 第一步、網路模式設置為橋接模式 第二步、設置ip和掩碼      ens33為當前機器的網卡名稱   在文件尾部添加   [填寫自己的IP地址]         &ems ...
  • 參考 ...
  • 進程調度程式是多任務操作系統的基礎,它是確保進程能有效工作的一個內核子系統,負責決定哪個進程投入運行、何時運行以及運行多長時間。只有通過進程調度程式的合理調度,系統資源才能夠最大限度地發揮作用,多進程才會有併發執行的效果。在一組處於可運行狀態的進程中選擇一個來執行,是調度程式所需完成的基本工作。 在 ...
  • 今天在使用 fedora 安裝 chrome 的時候遇到了問題,今天進行將安裝過程進行記錄下來。需要安裝第三方軟體倉庫。 我們需要進行安裝 fedora-workstation-repositories 這個倉庫 使用 yum/dnf 命令 安裝並開啟chrome 倉庫,安裝這個 rpm 包就是在/ ...
  • 當我們進行重新安裝系統(fedora 28)的時候,需要初始安裝一些 gnome 插件,來進行完善我們的使用。 首先我們應該進行安裝 gnome-tweak 工具來進行定製化系統。 tweak 可以進行定製化系統和管理gnome 插件來進一步定製化系統。想要安裝 gnome插件可以訪問:https: ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...