【问题标题】:Safeguard against system-hang due to high memory usage防止由于高内存使用而导致的系统挂起
【发布时间】:2018-07-30 16:24:57
【问题描述】:

在我安装了 Ubuntu 的计算机上,我可以通过运行一个使用大量内存的简单程序来冻结整个 GUI。之后,我什至无法使用 GUI 来停止或暂停有问题的程序。

如何配置我的操作系统,以免发生此问题?

在 Android、Windows 10、Mac 或 iOS 中是否存在类似问题?

这是 C++ 程序。

#define L 256*1024*1024
int main()
{
    while(1)
    {
        char *c=new char[L];
        for(long i=0;i<L;i++)
            c[i]='a';
    }
    return 0;
}

编辑:此程序也会在 Windows 8.1 中引起问题。即使 Alt-Ctrl-Del 也不起作用。

【问题讨论】:

  • 你能提供更多关于这个简单程序的细节吗?就这么简单,可以贴代码吗?
  • @MartinJames 请查看编辑。
  • @MartinJames 谢谢,但实际上我想要一个被动机制而不是主动“杀手”。

标签: linux memory process architecture operating-system


【解决方案1】:

我相信进程限制(由 bash 中的 ulimit 命令控制)是您正在寻找的。您可以使用ulimit -v 设置进程可以分配的最大虚拟内存量,参数为大小(KB)。例如,运行:

ulimit -v 100000

之前运行你的程序应该在它耗尽系统内存之前杀死它 (see Ubuntu page for more information)。请注意,限制是继承的,即您的 ulimit 命令正在为您的 shell 设置限制,然后 所有由它启动的子进程继承。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多