一个按钮可以将 Linux 的所有进程设置为暂停状态?

一个按钮可以将 Linux 的所有进程设置为暂停状态?

当 Linux 开始交换时,您基本上就完蛋了。很快系统将不再对任何输入做出反应,但会愉快地交换直到世界末日……

您能否想到一个可以保存所有进程的命令,从而(同时)允许您打开一个干净的 shell,您可以在其中检查问题的根源并终止消耗所有内存的进程?(我想这并不容易,因为内存可能已经完全填满,您需要换出更多内存来收集打开 shell 的空间,另一方面,所有其他交换进程都必须停止。)

如果您将这样的命令绑定到热键,那么也许您可以将其用作紧急按钮,从而节省大量时间。您知道这是否可行吗?以前有人尝试过这样的事情吗?如果有人能意识到这一点,那将是一个很酷的功能 :)

答案1

魔法系统请求正如其他答案中提到的,这确实是您所拥有的全部。如果您只有 SSH 访问权限,则可以像这样触发 SysReq:

# Enable Magic SysReq since most systems default this off
echo 1 > /proc/sys/kernel/sysrq
#call OOM Killer to try to free up memory
echo f > /proc/sysrq-trigger

用这个脚本制作一个可执行脚本,并在您注意到交换时立即执行它,这可能会给您一个机会。如果您有足够的内存来处理临时内存峰值,或者如果您在内存不足时可以终止随机程序,那么禁用交换也是一个选择。

与此相关,如果你有一个远程系统负载过大,你需要终止它,你可以使用这个来强制重启而无需彻底关闭:

echo 1 > /proc/sys/kernel/sysrq
#Trigger BIOS reset
echo b > /proc/sysrq-trigger

答案2

一个(次优!)解决方案是提供较少的交换。

这个想法是,当你绝望地举手投降的时候OOM 杀手开始。

讨论

我在内存有限的机器上使用 Linux 的经验表明

供互动使用

  • 最多使用 100% 的 RAM,GUI 就可以了
  • 使用 100% 到 150% 的 RAM 效果很好,尽管你可能会遇到一些命令行延迟
  • 使用 150% 到 175-200% 的 RAM慢的但响应速度足够快,可以让您在命令行上进行交互并智能地杀死不必要的东西。
  • 除此之外,即使有耐心,也几乎不可能手动修复它。

某些特殊情况允许您扩展这些限制。大型但很少活动的后台进程将“占用”内存,但只会偶尔变为活动状态,因此它们不会对可用性问题造成很大影响。

无论如何,计划是调整可用的交换,以便一旦机器太忙,您无法合理地手动杀死东西,OOM 杀手就会启动。

这不是最佳的(尽管 OOM 杀手有多种启发式方法),很难确定它会选择“正确的”。

答案3

魔法 SysRq是我所知道的最接近你的按钮的东西……

答案4

您也可以尝试一下nice -20 bash,您应该会得到一个响应的 shell...

相关内容