」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 Go 的「pprof」和 Docker 統計報告的記憶體使用情況不同?

為什麼 Go 的「pprof」和 Docker 統計報告的記憶體使用情況不同?

發佈於2024-12-22
瀏覽:367

Why Do Go\'s `pprof` and Docker Stats Report Different Memory Usage?

Go Tool Pprof 和Docker Stats 之間的記憶體使用差異

使用Go 1.11 時,您可能會遇到Go 報告的記憶體使用情況存在差異工具pprof (runtime.MemStats.sys) 和docker stats。 Docker stats 依賴 cgroup 來獲取記憶體使用信息,其中包括 Page Cache 和 Resident Set Size (RES)。另一方面,pprof 顯示記憶體使用情況的模糊值,因此很難直接比較兩者。

瞭解 cgroup 記憶體使用情況

cgroup 提供了一種方法限制和追蹤容器內的資源使用情況。 cgroups中的usage_in_bytes指標包括進程使用的記憶體和快取記憶體。如果容器從主機系統讀取文件,內核快取的記憶體也會計入usage_in_bytes。

Docker 中回收記憶體

如果容器達到其記憶體限制,Docker 嘗試回收未使用的記憶體。這與 OOM 錯誤不同,OOM 錯誤是在所有記憶體都被使用時發生的。

限制記憶體使用的方法

要控制docker 容器的記憶體使用,您可以可以在docker run 指令或docker-compose.yml 檔案中使用mem_limit 指定記憶體限制參數。

結論

pprof 和 docker stats 之間記憶體使用報告的差異源於它們測量記憶體利用率的不同方式。 docker stats 使用的 cgroups 在其計算中包括文件緩存內存,而 pprof 則提供一個模糊值而不考慮緩存。透過 cgroup 管理記憶體限制,您可以防止容器中記憶體不受控制的成長。

最新教學 更多>
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-22
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-22
  • Golang 是否提供行動語義,它如何實現類似的最佳化?
    Golang 是否提供行動語義,它如何實現類似的最佳化?
    Golang 中的行動語義Bjarne Stroustrup 在 C 11 中引入了行動語義,透過消除不必要的複製來優化資料傳輸。這種技術在處理大型資料結構時特別有用。 Golang 支援行動語意嗎? 與 C 不同,Golang 不以同樣的方式明確支援行動語意。然而,Go 採用了一種獨特的方法,透過...
    程式設計 發佈於2024-12-22
  • Go ":=" 與 "=":何時使用短變數宣告?
    Go ":=" 與 "=":何時使用短變數宣告?
    理解Go中“:=”和“=”的區別作為Go新手,你可能會困惑對於變量賦值,“ :=”和“=”似乎可以互換使用。然而,圍繞變數聲明的上下文有一個微妙的區別。 「=」的作用在 Go 中,「=」主要用於變數賦值。它遵循“var name type = expression”的語法,其中“name”代表要分配...
    程式設計 發佈於2024-12-22
  • 如何在 Python 中建立類似 Cron 的調度?
    如何在 Python 中建立類似 Cron 的調度?
    Python 類別 Cron 調度基於靈活表達式的調度任務的需求出現在各種環境中。雖然 cron 在許多環境中都能實現此目的,但它可能並不普遍可用或可行。在這種情況下,Python 提供了多種選項來建立您自己的類似 cron 的排程器。 使用調度庫的輕量級方法如果輕量級且純粹基於Python 的解決...
    程式設計 發佈於2024-12-22
  • 如何防止 JDBC 應用程式中的 ORA-01000:最大開啟遊標錯誤?
    如何防止 JDBC 應用程式中的 ORA-01000:最大開啟遊標錯誤?
    管理遊標和JDBC 物件以防止ORA-01000了解遊標和JDBC 之間的連接 ]當資料庫執行個體耗盡可用空間時,會發生ORA-01000 最大開啟遊標錯誤遊標。 資料庫上的單一遊標支援每個 JDBC ResultSet。 每個 JDBC Connection 可以處理多個事務,但一次只能處理一個事...
    程式設計 發佈於2024-12-22
  • 我們如何有效地混淆嵌入在可執行二進位檔案中的字串?
    我們如何有效地混淆嵌入在可執行二進位檔案中的字串?
    混淆二進位代碼中的字串問題陳述混淆嵌入可執行二進位檔案中的字串對於保護加密金鑰等敏感資訊免遭未經授權的存取非常有價值。然而,像將字串儲存在字元陣列中這樣簡單的方法可以在分析過程中輕鬆揭示其內容。 解決方案為了有效地隱藏已編譯二進位檔案中的字串,可以採用更複雜的方法。考慮以下範例:#include &...
    程式設計 發佈於2024-12-22
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 為什麼無法將非常量左值參考綁定到 C++ 中的右值?
    為什麼無法將非常量左值參考綁定到 C++ 中的右值?
    無法將非常量左值引用綁定到右值:解決方案給定的程式碼片段在初始化類別Foo 的對象時遇到錯誤在Bar 類別的建構子中。錯誤訊息表示非常量左值參考 (Foo f) 正在綁定到右值(呼叫 genValue() 的結果)。 在 C 中,非常量引用參數只能引用命名的變數(左值)。然而,genValue() ...
    程式設計 發佈於2024-12-22
  • 如何在 React 中選擇 DOM 元素:`document.getElementById()` 的替代方案?
    如何在 React 中選擇 DOM 元素:`document.getElementById()` 的替代方案?
    如何在 React 中選擇 DOM 元素? React 中 document.getElementById() 的等價物是什麼在 React 中,與使用普通 JavaScript 不同,直接存取 DOM 元素是不同的。 React 使用虛擬 DOM 來有效地更新真實 DOM,這使得它與普通 Java...
    程式設計 發佈於2024-12-22
  • 如何並行化 npm 腳本以加快開發速度?
    如何並行化 npm 腳本以加快開發速度?
    並行執行 npm 腳本在套件開發中,同時執行多個依賴腳本通常是必要的。為了緩解 npm 預設行為帶來的順序執行問題,出現了一個強大的解決方案:並發。 並發執行使用戶能夠並行運行多個 npm 腳本,確保並發操作,同時保留輸出可見性。要利用此功能,請按照下列步驟操作:同時安裝:利用您的首選終端,執行以下...
    程式設計 發佈於2024-12-22
  • 在 Go 中如何可靠地比較函數指標是否相等?
    在 Go 中如何可靠地比較函數指標是否相等?
    檢測Go 中函數的指標相等性每週傳統上,比較Go 中的兩個非零函數指標涉及使用== 或!=運算符。然而,根據最近的變化,這種方法現在會導致錯誤。 更改背後的基本原則函數指標相等比較的消除源自於相等與同一的概念。在 Go 中,== 和 != 運算子評估值的等價性,而不是同一性。這種區別旨在防止這些概念...
    程式設計 發佈於2024-12-22
  • 如何在CSS中選擇具有多個屬性的元素?
    如何在CSS中選擇具有多個屬性的元素?
    如何在 CSS 中指定多個屬性選擇器在 CSS 中,可以根據多個屬性選擇元素。當您想要使用條件組合定位特定元素時,這會很有用。 語法:要選擇與多個屬性值相符的元素,請使用下列語法:[attribute1=value1] [attribute2=value2]例如,選擇具有屬性的輸入元素name=&q...
    程式設計 發佈於2024-12-22
  • Go方法中`func`後面的括號表示什麼?
    Go方法中`func`後面的括號表示什麼?
    理解 Go 方法中 func 之後的括號在 Go 中,你可能會遇到 func 關鍵字後面的括號。這些表示方法,而不是函數。我們透過一個具體的例子來理解這個特性:func (v Version) MarshalJSON() ([]byte, error) { return json.Marshal...
    程式設計 發佈於2024-12-22
  • 如何讓我的 Go 程式無限期運行?
    如何讓我的 Go 程式無限期運行?
    在 Go 程序中維護執行在 Go 中,主 Goroutine 作為程序的入口點。然而,一旦它終止,整個過程也會終止。這對設計為無限期運行的應用程式提出了挑戰。 傳統方法傳統上,程式透過以下方式維持主要活動狀態:import "fmt" func main() { go for...
    程式設計 發佈於2024-12-22

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3