我认为我的观点非常正确。我在一台具有以下规格的设备上安装了 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。