如何对所有终止的进程进行内存转储?

如何对所有终止的进程进行内存转储?

我认为我的观点非常正确。我在一台具有以下规格的设备上安装了 Ubuntu 10.04:

  • 3.30GHz i5 处理器
  • 16GB 内存
  • 1TB 硬盘
  • 1 GB 板载网络

我同时运行 10 个用户,作为来自 NComputing 的虚拟计算机(终端)。

当计算机满负荷运行时,我最多使用 8 - 10 GB 内存。我有以下应用程序,所有 10 个用户同时使用:

  • 火狐
  • 自由办公室
  • 雷鸟
  • 许多其他文件夹
  • 大量印刷

大约 8:00 - 15:00 时,我的电脑(实际上是服务器)运行正常,然后大约 15:00 - 15:30 时,当我离开时,电脑无缘无故地死机了,没有任何警告。我不得不用电源强行关闭电脑,甚至无法使用重置按钮。

NComputing 硬件/软件人员告诉我,我应该对每个正在工作的用户(也就是 10 个用户)的所有终止进程进行内存转储。

我该如何做到这一点,释放内存转储,我是否应该在如此强大的硬件上体验类似的事情?

答案1

一个解决方案来自服务器故障 直接报价

我编写了一个完成此任务的脚本。

这个想法来自 James Lawrie 的回答和这篇文章:http://www.linuxforums.org/forum/programming-scripting/52375-reading-memory-other-processes.html#post287195

#!/bin/bash

grep rw-p /proc/$1/maps | sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' | while read start stop; do gdb --batch --pid $1 -ex "dump memory $1-$start-$stop.dump 0x$start 0x$stop"; done

将其放入文件(例如“dump-all-memory-of-pid.sh”)并使其可执行

用法:./dump-all-memory-of-pid.sh [pid]

输出将打印到具有以下名称的文件中:pid-startaddress-stopaddress.dump

依赖项:gdb

结束引用

唯一需要添加的是一个循环来迭代所有 PID。

相关内容