Memory

Gentoo Hardened 執行約 12 小時後消耗 3 GB 記憶體,執行的程序很少

  • April 19, 2016

我正在使用核心 4.3.3-hardened-r4 執行 Gentoo Hardened AMD64。由於我的系統只執行一些基本的守護程序,如 wpa_supplicant、cron 或 DHCP,並且只有 Windowmaker、GKrellM 和 xterm 打開的 X 會話,Linux 隨著時間的推移開始消耗越來越多的 RAM,直到大約 8-12 小時後它結束記憶體不足並引發核心恐慌。這不是 Linux 報告用於緩衝區和文件系統記憶體的 RAM 的問題,因為 top、htop 和 GKrellM 都考慮了這些情況並顯示程序實際佔用了多少 RAM。直到最近,我還認為它與我的比特幣核心客戶端相關聯,但事實並非如此(我只是在我的 Linux 系統啟動時偶然碰巧執行了該應用程序)。

在發布完整的世界更新 ( ) 時,我能夠在某些情況下看到我的 RAM 使用突然恢復正常emerge -NDu --with-bdeps=y @world,但我無法重現此解決方法。

到目前為止,我已經嘗試了以下修復:

  1. 在我的核心上編譯 NUMA 支持(預設情況下,Gentoo 的 genkernel 不啟用)並添加vm.zone_reclaim_mode=1到我的 sysctl.xml 中。沒用。
  2. 添加vm.drop_caches=1到我的 sysctl. 沒用。
  3. 檢查 tmpfs 掛載是否已滿。我的 tmpfs 掛載幾乎沒有註冊超過 1 MB 的文件系統使用量。

在這些螢幕截圖中可以看到這種行為的證據:

**圖表 A:**其中執行的唯一消耗記憶體的程序是 Firefox、GKrellm 和 X,而 Linux 正在消耗近 3 GB 的核心。 **注意:**我沒有在這裡啟用我的交換空間(它在 USB 3.0 外部 HD 上,因為我的內部 HD 又舊又慢),但即使啟用了交換,在保持 8 多個小時後我仍然會出現 OOM 核心恐慌比特幣核心執行。

在此處輸入圖像描述

**圖表 B:**以防 htop 和 GKrellm 有缺陷,我再次檢查了 top。結果相同。

在此處輸入圖像描述

**圖表 C:**我的 tmpfs 掛載使用統計資訊、我的輸出free和我的/proc/meminfo 可用內容。

這篇文章已經過大量編輯,以解釋我最近的發現。舊文章可以在此 Pastebin上找到。

您是否有基於 SHM 的掛載,例如記憶體支持/tmp/var/tmp? 可能會生成臨時文件,即使在程序退出後也會消耗記憶體。這些文件將保留在 ram 中,直到它們被刪除或系統重新啟動。檢查您的掛載/etc/fstab以及mounttmpfs 條目。

還要檢查您的日誌輪換,因為它可能會在臨時目錄中創建大文件。如果您使用的是 systemd,則可能值得清除日誌。例如:

journalctl --vacuum-size=500M

把它們加起來:

  • 使用比特幣客戶端后,它開始吃掉你的記憶體到崩潰的地步
  • 它不會返回記憶體(直到你做了一些奇怪的事情)

第一個看起來像經典的記憶體洩漏。您可以使用 來檢查程序的性能和記憶體管理valgrind,但它會大大減慢它。

第二個可能是第一個問題的後代。我不知道為什麼會發生這種情況,但我只能猜測是因為記憶體問題(或大量記憶體消耗,或者可能是其他一些錯誤 - 例如程序卡在 D 狀態?)。由於其他應用程序沒有表現出相同的行為,我猜問題是比特幣軟體,而不是你的系統。

因此,我們為修復它所做的一切都是黑客行為。可能會有成功的黑客攻擊,但這仍然不是最好的方法。如果您可以訪問原始碼並了解一點程式知識,您可以嘗試執行一些靜態程式碼分析器,看看是否有任何“簡單”的錯誤需要修復。您可以嘗試使用valgrind. 如果你沒有這些(程式碼/技能),你能做的最後一件事就是向開發人員提供回饋——可能是一些 bugtracker、論壇或郵件列表。這樣有人會調查它,並確認(並希望解決)問題。

引用自:https://unix.stackexchange.com/questions/265629