【发布时间】:2011-10-23 23:44:25
【问题描述】:
我在 Linux 64 位 (Redhat Enterprise) 中有一个进程,它将 100 万条记录注册到内存中,每条记录为 4KB,因此总内存消耗约为 4 GB。
我的电脑有 2GB 的 RAM 和 3GB 的交换内存。所以很明显,部分数据将被放入交换内存中。问题是我不知道为什么遍历所有这些记录真的需要很长时间。我有一个函数可以遍历每条记录并做一些事情。它适用于大约 500,000 条记录,该功能只需要几分钟即可完成。但是,如果记录数量翻倍,即 1,000,000 条记录,则需要数小时才能完成相同的功能。我在 Linux 中使用 top 命令来检查 cpu 负载,发现它大约是 90%wa(等待 I/O 的时间)。我想这可能会导致问题,但真的不知道为什么会这样。
如果有任何有用的想法,我会非常感谢。
【问题讨论】:
-
您问题的唯一实际答案是购买更多 RAM。现在 RAM 很便宜。
-
迭代时是否修改记录?
-
@Maxim 不,我只是阅读并计算一些东西
-
@Alexandre 我不知道这是否是原因,所以在知道实际原因之前,我不会冒险购买更多 RAM。还是谢谢
-
@longbkit:除非您有一个具有超指数复杂性的算法,否则在将数据大小乘以 2 时将运行时间乘以 100 是不正常的。 2GB 大约是 20 美元。是否昂贵仅取决于您每小时获得多少报酬来解决这个问题。