当大型程序超出内存时 Ubuntu 会挂起

当大型程序超出内存时 Ubuntu 会挂起

我一直在使用 Ubuntu 运行材料的计算模拟。有时计算会超出机器的总可用内存(64GB RAM),并开始使用交换空间。发生这种情况时,Ubuntu 会停止,需要重新启动。使用 Linux Slackware 运行相同的模拟时,并没有发生这种情况,相反,模拟已停止,并且我在终端中出现错误,类似于:“分段错误”。是否可以在 Ubuntu 中运行模拟并克服 Ubuntu 停止的问题,就像 Slackware 一样?

谢谢。

答案1

如果您在一个系统中运行模拟软件时出现分段错误,而在另一个系统中运行模拟软件时速度急剧下降,则说明您的模拟软件无法处理内存不足的问题。任何分段错误都表明存在错误并且通常产生分段错误的错误实际上是代码的行为是不明确的. 在不同的系统上它可能会以不同的(错误)方式运行。

所以:

  • 如果您或您的同事编写了模拟软件,则应该对其进行调试,以期提高性能。我建议首先使用调试符号(gcc -g ...)进行编译,然后进行交互式调试(例如,在gdb) 在 Slackware 上制作堆栈跟踪分段错误。

    你还应该调试它以查找内存泄漏。你可以使用瓦尔格林德Boehm GC 以泄漏检测模式运行或其他多种用于此目的的工具。

    当然,最合适的调试方法取决于其工作方式和编写语言的细节。

  • 如果您从完全独立的一方获得了模拟软件,则应报告错误。如果您有可用的调试版本或调试符号,则错误报告将受益于包含 Slackware 系统上的分段错误的堆栈跟踪。

您可以采取一些措施来终止 Ubuntu 中的模拟。

整个系统不应该停止运行。这很可能表明 Ubuntu 中存在错误,可能是内核中的错误。即使是大量磁盘 I/O 也只会适度减慢 Ubuntu 的速度。您可能想报告 Ubuntu 内核中的错误。

如果你想这么做,首先阅读。然后您可以通过运行来启动错误报告流程ubuntu-bug linux(或者,如果它是仅有命令行的系统,则apport-cli linux)。

解决问题,您可以尝试通过在limits.conf。 也可以看看这篇博文

如果问题与 CPU 优先级有关,你可以使用以下方法以较低的优先级运行模拟:nice(例如)或在跑步时放低nice -n 15 command...renice

如果你能使用机器随着速度变慢,模拟需要停止(有时虚拟控制台响应比 GUI 更好),你可以尝试使用信号KILL(这是终止进程最有效的方法):

kill -KILL command

这里command只是一个单词,即可执行文件的名称。所有具有该名称的可执行文件都将被终止(因此“killall“)。如果您有PID(从ps),当然你也可以选择跑步。kill -KILL PID

相关内容