Nice

不錯,ionice 還不夠

  • February 20, 2015

我有一個腳本可以啟動大的、消耗 CPU 和記憶體的程序樹。那裡有 Python 和執行檔,但一切都從單個 bash 腳本和 python 子程序開始。

在執行期間,系統的其餘部分被完全阻塞。我試圖通過 來緩解 $ nice -n10 ionice -c2 ./Script.sh,但這還不夠 - 使用電腦非常滯後(實際上這是開發桌面,但指定伺服器上的問題將是相同的)。

我懷疑,問題出在使用大量記憶體的程序上——一切最終都被換掉並變得遲緩。

有沒有辦法降低程序(及其遞歸子程序)訪問物理記憶體的優先級?我更喜歡在後台慢一點,對其他任務的影響有限。

您不能限制消耗記憶體的“速度”,但您可以通過各種不同的機制限制它的總記憶體使用量。

  1. 安全限制 通過 /etc/security/limits.conf 限制使用者執行程序的記憶體使用量。如果您以同一使用者處理不同內容執行此過程,這可能不適用於您的情況。

例子:

username hard as 1000000
  1. 控制組 您可以使用 cgroups 創建一個組並限制記憶體使用量。只需創建 cgroup,如下所示:
# cat >> /etc/cgconfig.conf << EOF
group memlimit {
   memory {
       memory.limit_in_bytes = 1073741824;
   }
}
EOF

# cat >> /etc/cgrules.conf <<EOF
username memory   memlimit/
EOF

Offcourse - 在這兩種情況下,您都必須開發您的程序,以便它可以從未能分配更多記憶體中恢復。

如果不能,您只需要為系統添加更多記憶體,這樣就可以避免交換。一旦交換開始,它就在核心手中,你不能 - 例如 - 降低 kswapd 的優先級,即使你可以 - 這並不能保證你使用的某些程序仍然不會被交換出,從而導致更慢的系統響應。只是不要去那裡。

引用自:https://serverfault.com/questions/670164