为什么systemd运行内存限制会导致程序崩溃?

为什么systemd运行内存限制会导致程序崩溃?

我对不同的程序使用不同的方法来控制它们的资源管理。当我使用系统运行为了瘸子(GNU图像处理程序),当图片的内存要求高于限制(即我设置的300MB)时,程序崩溃并关闭。有没有系统运行方法既可以安全地使用它,又不会崩溃并将其内存限制到极限?

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

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

答案1

一个程序(例如 gimp)是经过编译的,其所有行为都是预设的。如果它无法为自己分配内存,那么它将无法运行任何任务。任何时候程序尝试访问它无法访问的内存时,它都必须退出(出现分段错误),因为程序期望运行该内存,例如在 gimp 的情况下,用于存储图像。

当然,该图像可以用更少的内存来存储,但这不在 gimp 的代码中,并且仅仅拒绝 gimp 访问内存不会提高它的效率。

如果您遇到内存不足的问题,一个好的解决方案是交换文件。这不会限制你的程序对内存的访问,这会破坏它,而是将未使用的内存存储到磁盘(而不是 RAM 上),并在需要使用时将其从磁盘上拉回。

相关内容