Systemd-Run

為什麼 systemd-run 記憶體限制會導致程序崩潰?

  • March 17, 2022

我對不同的程序使用不同的方法來控制它們的資源管理。當我將systemd-run用於gimp(GNU圖像處理程序)時,當圖片的記憶體要求高於限制(即我設置的300MB)時,程序崩潰並關閉。是否有任何systemd-run方法既可以安全地使用它而不會崩潰並將其記憶體限制在限制範圍內?

我使用以下命令在其快捷方式(即其桌面文件)中使用 systemd-run 啟動它:

systemd-run --scope -p MemoryLimit=300M gimp-2.8 %U

一個程序,例如 gimp,被編譯,它的所有行為都是預設的。如果它無法為自己分配記憶體,那麼它將無法執行任何任務。每當程序嘗試訪問它無法訪問的記憶體時,它必須退出(出現分段錯誤),因為程序希望擁有該記憶體來執行,例如在 gimp 的情況下,以儲存圖像。

當然,可以用更少的記憶體來儲存該圖像,但這不在 gimp 的程式碼中,並且僅僅拒絕 gimp 訪問記憶體不會提高效率。

如果您遇到記憶體不足的問題,一個很好的解決方案是交換文件。這不會限制您的程序對記憶體的訪問,這會破壞它,而是將未使用的記憶體儲存到磁碟(而不是在 RAM 上),並在需要使用時將其從磁碟中拉回。

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