深入解析 Docker 容器進程的 cgroup 和命名空間信息

深入解析 Docker 容器進程的 cgroup 和命名空間信息

在現代 Linux 系統中,控制組(cgroup)和命名空間(namespace)是實現容器化技術的核心機制。cgroup 用于管理和限制進程的資源使用(如 CPU、內存、I/O),而命名空間則通過隔離進程的資源視圖(如 PID、網絡、文件系統)實現進程間的獨立性。本文以一個實際案例為基礎,詳細分析 PID 為 31613 的 Docker 容器進程的 cgroup 和命名空間信息,解釋其輸出內容,并探討它們在容器隔離中的作用。

背景介紹

我們分析的進程(PID 31613)運行在一個 Docker 容器中,容器 ID 為 5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8。通過檢查 /proc/31613/cgroup/proc/31613/ns 目錄,我們可以了解該進程的資源限制和隔離配置。以下是詳細的分析步驟和輸出解釋。

一、cgroup 信息的查看與解析

1. 查看 cgroup 信息

要查看進程的 cgroup 信息,可以使用以下命令:

cat /proc/31613/cgroup

輸出如下:

11:devices:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
10:pids:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
9:perf_event:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
8:cpuset:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
7:memory:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
6:blkio:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
5:hugetlb:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
4:freezer:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
3:net_prio,net_cls:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
2:cpuacct,cpu:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
1:name=systemd:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8

2. 輸出解析

輸出格式為 層級ID:控制器:路徑,表明系統使用的是 cgroup v1(多個控制器分別列出)。每個控制器對應一種資源管理功能,路徑 /docker/<container_id> 表示該進程屬于指定 Docker 容器的 cgroup 層級。以下是每個控制器的作用:

  • devices(層級 11):限制設備訪問權限(如 /dev/sda),確保容器無法直接操作主機設備。
  • pids(層級 10):限制容器內最大進程數,防止 fork 炸彈攻擊。
  • perf_event(層級 9):支持性能監控(如 CPU 計數器),用于容器性能分析。
  • cpuset(層級 8):限制進程可使用的 CPU 核心和內存節點,優化資源分配。
  • memory(層級 7):限制內存使用量,防止內存耗盡(如通過 memory.limit_in_bytes 設置)。
  • blkio(層級 6):限制塊設備 I/O 帶寬或 IOPS,避免 I/O 競爭。
  • hugetlb(層級 5):限制大頁內存使用,常見于高性能應用。
  • freezer(層級 4):支持暫停/恢復容器進程,用于遷移或調試。
  • net_prio,net_cls(層級 3):管理網絡優先級和流量分類,實現網絡隔離。
  • cpuacct,cpu(層級 2):統計和限制 CPU 使用(如通過 cpu.shares 設置權重)。
  • name=systemd(層級 1):systemd 管理的 cgroup,用于與 Docker 集成。

3. 意義

  • 資源隔離:每個控制器為容器分配獨立的資源限制,確保容器不會過度占用主機資源。
  • Docker 管理:路徑 /docker/<container_id> 表明 Docker 通過 systemd 和 cgroup v1 管理容器資源。
  • 進一步查看:可通過 /sys/fs/cgroup/<控制器>/docker/<container_id> 檢查具體限制,如內存上限:
cat /sys/fs/cgroup/memory/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8/memory.limit_in_bytes

二、命名空間信息的查看與解析

1. 查看命名空間信息

要查看進程的命名空間信息,可以檢查 /proc/31613/ns 目錄:

cd /proc/31613/ns
ls

輸出如下:

ipc  mnt  net  pid  user  uts

2. 輸出解析

/proc/31613/ns 目錄下的每個文件是符號鏈接,對應一種命名空間類型,指向內核中的命名空間標識符。列出的命名空間及其作用如下:

  • ipc:隔離 System V IPC 和 POSIX 消息隊列,防止容器間 IPC 干擾。
  • mnt:隔離文件系統掛載點,容器有獨立的掛載視圖(如 Docker 的根文件系統)。
  • net:隔離網絡資源(如網絡接口、IP 地址),支持容器網絡模式(如橋接)。
  • pid:隔離進程 ID,容器內 PID 從 1 開始,與主機隔離。
  • user:隔離用戶和組 ID 映射,支持 rootless 容器等安全特性。
  • uts:隔離主機名和域名,容器可設置獨立主機名。

3. 缺失的命名空間

輸出中未出現以下命名空間:

  • cgroup:隔離 cgroup 視圖,可能因系統未啟用 cgroup 命名空間(常見于 cgroup v1)。
  • time:隔離系統時間,可能是內核版本較舊(Linux 5.6 后支持)。
  • pid_for_children:子進程的 PID 命名空間,缺失表明未創建嵌套 PID 命名空間。

4. 意義

  • 容器隔離:這些命名空間確保容器在 IPC、文件系統、網絡、PID、用戶和主機名方面與主機和其他容器隔離。
  • Docker 配置:Docker 默認分配 ipc, mnt, net, pid, uts 命名空間,user 命名空間視配置啟用。
  • 系統環境:主機名為 VM-4-12-centos,可能運行較舊的 CentOS 系統,限制了某些命名空間(如 time)。

5. 進一步分析

要獲取更多細節,可執行以下操作:

  • 查看 inode 號:檢查命名空間標識符,確認是否共享:
ls -l /proc/31613/ns

示例輸出:

lrwxrwxrwx 1 root root 0 Apr 24 12:00 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 net -> net:[4026531992]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 uts -> uts:[4026531838]
  • 相同 inode 號表示共享命名空間。

  • 檢查網絡配置:查看容器網絡命名空間:

nsenter --net=/proc/31613/ns/net ip addr
  • 檢查掛載點:查看容器文件系統掛載:
cat /proc/31613/mounts
  • 檢查 PID:確認容器內 PID:
grep NSpid /proc/31613/status

示例輸出:

NSpid: 31613 1
  • 表示主機 PID 為 31613,容器內 PID 為 1(主進程)。

三、綜合分析

1. cgroup 和命名空間的協同作用

  • cgroup:通過控制器(如 memory, cpu)限制資源使用,確保容器不會影響主機或其他容器。
  • 命名空間:通過隔離資源視圖(如 net, pid)實現容器環境的獨立性。
  • Docker 實現:Docker 結合 cgroup v1 和命名空間,為容器分配獨立的資源限制和隔離環境。

2. 系統環境推測

  • cgroup v1:輸出顯示多個控制器,表明系統使用 cgroup v1,未啟用 cgroup 命名空間。
  • CentOS 系統:主機名 VM-4-12-centos 提示可能為 CentOS 系統,內核版本可能較舊,限制了 time 等新命名空間。
  • Docker 配置:標準的 Docker 命名空間配置(ipc, mnt, net, pid, uts, user),表明這是一個典型容器進程。

3. 實際應用

  • 資源管理:通過 cgroup 信息,管理員可監控和調整容器的資源限制(如增加 CPU 配額)。
  • 隔離調試:通過命名空間信息,可確認容器隔離效果(如檢查網絡配置)。
  • 故障排查:若容器行為異常,可通過 /proc/[pid]/ns/proc/[pid]/cgroup 分析問題根因。

四、總結

通過分析 PID 31613 的 cgroup 和命名空間信息,我們深入了解了 Docker 容器如何通過 cgroup v1 實現資源限制,以及通過命名空間實現進程隔離。cgroup 輸出顯示了多個控制器(如 memory, cpu),為容器分配獨立的資源限制;命名空間輸出(ipc, mnt, net, pid, user, uts)確保容器環境的獨立性。這些機制共同構成了 Docker 的核心隔離和資源管理能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77262.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【汽車ECU電控數據管理篇】S19文件格式解析篇章

一、S19格式是啥 在電控文件管理的初期階段&#xff0c;我首次接觸到的是 A2L 和 HEX 文件。其中&#xff0c;A2L 文件主要承擔著描述性功能&#xff0c;它詳細地描述了各種參數和配置等相關信息。而 HEX 文件則是一種刷寫文件&#xff0c;其內部明確記錄了具體的地址以及對應的…

python編程相關的單詞

the: 在編程中&#xff0c;“the” 是一個常見的英語單詞&#xff0c;用于指定特定的對象或變量。例如&#xff0c;“the function” 指的是某個特定的函數。 the的拼寫是t,h,e.再讀一次t,h,e and: 在編程中&#xff0c;“and” 是一個邏輯運算符&#xff0c;用于連接兩個條件&…

網絡原理 - 4(TCP - 1)

目錄 TCP 協議 TCP 協議段格式 可靠傳輸 幾個 TCP 協議中的機制 1. 確認應答 2. 超時重傳 完&#xff01; TCP 協議 TCP 全稱為 “傳輸控制協議”&#xff08;Transmission Control Protocol&#xff09;&#xff0c;要對數據的傳輸進行一個詳細的控制。 TCP 協議段格…

python博客爬蟲列表

我希望對指定網頁的&#xff0c;博客列表&#xff0c;獲取url&#xff0c;然后保存成本地文件&#xff0c;用python實現 step1: import requests from bs4 import BeautifulSoup import jsondef get_blog_links(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win6…

軟件測試入門學習筆記

今天學習新知識&#xff0c;軟件測試。 什么是軟件測試&#xff1f; 使用人工和自動手段來運行或測試某個系統的過程&#xff0c;目的在于檢驗它是否滿足規定的需求或弄清實際結果與預期結果之間的差別。 軟件測試的目的&#xff1f; 1&#xff09;為了發現程序&#xff0…

uniapp開發2--uniapp中的條件編譯總結

以下是對 uni-app 中條件編譯的總結&#xff1a; 概念&#xff1a; 條件編譯是一種技術&#xff0c;允許你根據不同的平臺或環境&#xff0c;編譯不同的代碼。 在 uni-app 中&#xff0c;這意味著你可以編寫一套代碼&#xff0c;然后根據要編譯到的平臺&#xff08;例如微信小…

【k8s】sidecar邊車容器

一、Sidecar 模式簡介 Sidecar 模式是一種常見的微服務架構設計模式。它通過將附加功能或服務與主應用程序部署在同一容器或主機上&#xff0c;從而實現對主應用程序的增強和擴展。Sidecar 的名稱來源于摩托車的邊車&#xff0c;它與摩托車緊密相連&#xff0c;為主車提供額外…

MySQL索引使用一定有效嗎?如何排查索引效果?

MySQL索引使用一定有效嗎&#xff1f;如何排查索引效果&#xff1f; 1. 索引一定有效嗎&#xff1f; 不一定&#xff01; 即使你創建了索引&#xff0c;MySQL 也可能因為以下原因 不使用索引 或 索引效果不佳&#xff1a; 索引選擇錯誤&#xff1a;MySQL 優化器可能選擇了錯…

漏洞管理體系:從掃描評估到修復驗證的全生命周期實踐

漏洞管理體系&#xff1a;從掃描評估到修復驗證的全生命周期實踐 在網絡安全防御體系中&#xff0c;漏洞管理是“攻防博弈”的核心戰場。據NVD&#xff08;國家漏洞數據庫&#xff09;統計&#xff0c;2023年新增漏洞超21萬個&#xff0c;平均每天披露575個&#xff0c;其中32…

cdh平臺管理與運維最佳實踐

一、容量規劃:構建可持續擴展的數據湖底座 1.1 資源評估三維模型 #mermaid-svg-4Fd5JDKTgwqF1BUd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Fd5JDKTgwqF1BUd .error-icon{fill:#552222;}#mermaid-svg-4Fd5J…

力扣347:前K個高頻元素

給你一個整數數組 nums 和一個整數 k &#xff0c;請你返回其中出現頻率前 k 高的元素。你可以按 任意順序 返回答案。 示例 1: 輸入: nums [1,1,1,2,2,3], k 2 輸出: [1,2]示例 2: 輸入: nums [1], k 1 輸出: [1]題解&#xff1a; 一、思路&#xff1a; 1.我希望將nu…

前饋神經網絡層

FeedForward Network 論文地址 https://arxiv.org/pdf/1706.03762 前饋網絡介紹 前饋網絡是Transformer模型中的關鍵組件&#xff0c;每個Transformer層包含一個多頭注意力模塊和一個前饋網絡模塊。該模塊通過兩次線性變換和激活函數&#xff0c;為模型提供非線性建模能力。其核…

如何將 sNp 文件導入并繪制到 AEDT (HFSS)

導入 sNp 文件 打開您的項目&#xff0c;右鍵單擊 “Result” 繪制結果 導入后&#xff0c;用戶可以選擇它進行打印。請參閱下面的示例。要點&#xff1a;確保從 Solution 中選擇它。

es-核心儲存原理介紹

原始數據 idusernamegradedescription1ahua87i like study2xiaowang92i like es3zhaoyun63i like java 倒排索引 description使用的text分詞&#xff0c;使用倒排索引 termidi1,2,3like1,2,3study1es2java3 分詞后&#xff0c;如果匹配 es&#xff0c;則需要逐行匹配&…

jmeter中監控服務器ServerAgent

插件下載&#xff1a; 將ServerAgent上傳至需要監控的服務器&#xff0c;mac/liunx啟動startAgent.sh&#xff08;啟動命令&#xff1a;./startAgent.sh&#xff09; 在jmeter中添加permon監控組件 配置需要監控的服務器IP地址&#xff0c;添加需要監控的資源 注意&#xf…

UML 狀態圖:以共享汽車系統狀態圖為例

目錄 一、初識 UML 狀態圖 二、共享汽車系統狀態圖詳解 &#xff08;一&#xff09;初始狀態與車輛空閑狀態 &#xff08;二&#xff09;用戶預定相關狀態 &#xff08;三&#xff09;等待取車與用戶取車狀態 &#xff08;四&#xff09;用戶還車及后續狀態 三、狀態圖繪…

橙子果品分級-目標檢測數據集(包括VOC格式、YOLO格式)

橙子果品分級-目標檢測數據集&#xff08;包括VOC格式、YOLO格式&#xff09; 數據集&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1jpdrylu06mm0r9pGVyb-AQ?pwd94a6 提取碼: 94a6 數據集信息介紹&#xff1a; 共有 9195 張圖像和一一對應的標注文件 標注文件格式…

uniapp 仿企微左邊公司切換頁

示例代碼&#xff1a; <template><view class"container"><!-- 遮罩層 --><view class"mask" v-if"showSidebar" click"closeSidebar"></view><!-- 側邊欄 --><view class"sidebar"…

pyqt中以鼠標所在位置為錨點縮放圖片

在編寫涉及到圖片縮放的pyqt程序時&#xff0c;如果以鼠標為錨點縮放圖片&#xff0c;圖片上處于鼠標所在位置的點&#xff08;通常也是用戶關注的圖片上的點&#xff09;不會移動&#xff0c;更不會消失在圖片顯示區域之外&#xff0c;可以提高用戶體驗&#xff0c;是一個值得…

巧記英語四級單詞 Unit5-中【曉艷老師版】

ignore v.無視&#xff0c;不理睬 發音“一個鬧”&#xff0c;對付一個無理取鬧的孩子&#xff0c;最好的方式就是無視 不理睬ignorant a.無知的&#xff0c;不禮貌的 對于什么事都無視&#xff0c;中國第一個不平等條約問也不知道就是無知的neglect n.忽視 negative消極的&a…