【发布时间】:2011-11-04 11:27:32
【问题描述】:
我一直在运行一个加密密集型应用程序,它生成伪随机字符串,具有特殊的结构和数学要求。在过去的 8 天里,它为每个节点生成了大约 170 万个凭证号。生成过程是 CPU 密集型的,内存要求非常低。
在 OTP-14B02 上运行的 Mnesia 是存储数据库,生成是在每个虚拟机中完成的。我在集群中有 3 个节点,所有 mnesia 表 disc_only_copies 类型。突然,随着 Solaris 机器上的活动增加(其他用户远程登录并启动 web 服务器、ftp 会话和其他任务),我的 bash shell 开始报告 fork: not enough space 错误。
我的 erlang Vms 也出现了以下错误:
崩溃转储被写入:erl_crash.dump temp_alloc:无法重新分配 8388608 字节的内存(“root_set”类型)。
通常,我们得到内存分配错误,而不是memory re-location errors,通常"heap" 类型的内存是问题所在。这次报告的内存类型是"root-set"。
Qn 1. 这是什么"root-set" 内存?
Qn 2. 它与 CPU 密集型活动有关吗? (为什么要问这个是当我开始任务时,机器响应说鼠标或键盘中断太慢意味着 CPU 太忙或其他一些我现在无法解释的问题)
Qn 3. 可以避免这样的错误吗?如何 ?
【问题讨论】: