限制子進程的總體記憶體使用量

限制子進程的總體記憶體使用量

我有一個長時間運行的腳本,它在具有 8GB 記憶體的 Linux 電腦上啟動多個子進程。運行幾個小時後,它會佔用近 90% 的內存,這使得其他服務(例如 SSH)在啟動磁碟交換時沒有回應。

以編程方式限制腳本和所有子進程的總體內存使用量而不為每個進程單獨設置特定內存限制的最佳方法是什麼?不同的子進程可以使用非常不同的記憶體量,因此設定固定的閾值會非常低效。

理想情況下,我想簡單地指定“僅使用最多 75% 的內存”,並讓系統根據需要將其分配給子進程,以確保我仍然可以在任何給定時間通過 SSH 連接到計算機。我首先嘗試設定一個 cron 作業來自動將 renice sshd 設定為最高優先級,但這沒有效果,而且我通常無法透過 SSH 登錄,或 SSH 提示速度慢得無法使用。

答案1

以專用用戶身份運行進程並透過以下方式進行設置cgroups

/etc/cgconfig.conf

group limitedram {
    memory {
        memory.limit_in_bytes = 6442450944;
    }
}

/etc/cgrules.conf

serviceuser   memory   limitedram/

這將記憶體使用限制為serviceuser6 GB。

相關內容