保證 Shell 對掛鉤系統的反應能力

保證 Shell 對掛鉤系統的反應能力

所以我的系統正在進入 DOS,或者我剛剛打開了一個巨大的檔案(openstreetmapsplanet.osm)。系統完全沒有回應...如此無回應,需要大約 10 分鐘才能進入我的 shell、運行 top 並終止有問題的進程。我準備好按下重置按鈕了。

問題:是否可以留出一定的最小系統資源量,這樣,如果我的系統被固定,我仍然有 2% 的 cpu(2ghz 系統 ~ 40 mhz! - 應該足夠 shell 對吧?我的意思是,它有效在90 年代初)放在某個地方?或者某種方法來限制違規進程?

在遇到這些情況時,我希望作業系統能夠限制失控進程,以便我仍然可以使用該系統,即使這意味著整體效能下降 10%。如果能夠在這種情況下採取行動而不是完全無助,那就太好了。

答案1

有趣的是你說「很好」。一種解決方案是「限制」有問題的進程,使其不會佔用 CPU(實質上降低了應用程式的優先權)。

若要啟動優先順序較低的進程:

nice <program> &

若要更改正在運行的進程的優先權:

renice 4 <program>

優先權範圍從 -20 到 20。0 為預設值,20 為最低優先權,-20 為最高優先權。

答案2

您可以編寫一個腳本來尋找在 tty0 或 ttyS0 上執行的進程,或者您想要優先順序 root 登入的任何位置,並將這些進程設定為即時調度優先權。腳本本身應該以即時優先權啟動。

在交換風暴期間存取記憶體是一項艱鉅的任務。您可以使用 Linux cgroup。您可以用 C 語言而不是腳本編寫程序,並使用 mlockall 將其記憶體鎖定到 RAM 中。然後該程式可以使用 ptrace 探查其他進程並強制它們呼叫 mlockall。您可以使用它來獲得不受交換影響的 bash shell。

除非您是程式設計師或可以找到已經寫過此程式碼的人(我沒有),否則 cgroups 可能是保留一些高優先記憶體的更簡單方法。

相關內容