【发布时间】:2013-12-06 10:42:31
【问题描述】:
我的脚本执行以下操作
- 读取一个巨大的文本文件并从中创建一个哈希。(大约 2400 万个简单的键值对。大约需要 5 分钟,消耗 4Gb 计算机内存的 92%)
- 使用来自哈希的信息运行模拟。(大约需要 30 分钟)
- 在模拟结束时打印结果(到文件和标准输出)
然后它在最后一个打印语句后等待 10+ 分钟并退出。最后的等待不会每次都发生。在等待top 命令期间显示相同的 92% 内存使用但没有 cpu 使用。为什么有时在完成后会等待?如果我点击 CtrlC,它会立即退出,结果(结果)没有任何变化。我该如何调试这个或者它是预期的行为,因为哈希很大?
编辑
是否可以通过从散列中删除不需要的键值对来即时回收一些内存?
【问题讨论】:
-
你的很多问题都慢可能是由于交换。最后花费的时间可能是由于您的数据结构的破坏。
POSIX::_exit(0)将绕过清理。 -
如果我绕过清理,操作系统不会回收内存吗?这是一个好习惯吗?如果我在内存更大的系统上运行它,这个问题会消失吗?
-
操作系统将回收内存。这不是一个好习惯,因为不会调用析构函数。是的,如果这是我猜测的交换问题。
-
您是否查看过进程在运行时使用了多少交换空间?您可以使用 ps 或 top 执行此操作。您还可以使用 free 监控系统范围的交换使用情况。
-
有时为了了解正在发生的事情,如果在 Linux 上我执行 ps -ef & 然后 sudo strace -p
-s128 它可能(也可能不会)了解它的内容最多。
标签: linux perl hash operating-system swap