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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...