我有一个具有以下模式的应用程序:
- 2 个长时间运行的进程在一些空闲时间后进入休眠状态,并且它们的内存消耗按预期下降
- N (0 < N < 100) 个工作进程,它们在空闲超过 10 秒时执行某些工作并休眠,如果空闲超过两个小时则终止
- 在夜间,当没有活动时,进程内存会恢复到与应用程序启动时几乎相同的值,这是预期的,因为所有工作人员都已死亡。
问题是“系统”部分不断增长(大约 1GB/周)。
我的问题是如何调试存储在那里的内容或谁在该区域分配内存而不释放它。
我已经测试了 lists:keysearch/3并且它似乎没有泄漏内存,因为这是我正在使用的唯一本地东西(没有端口,没有驱动程序,没有 NIF,没有 BIF,什么都没有)。Erlang 版本是 R15B03。
这是当前的erlang:memory()输出(少量流量,应用程序于 2 月 3 日启动):
[{total,378865650},
{processes,100727351},
{processes_used,100489511},
{system,278138299},
{atom,1123505},
{atom_used,1106100},
{binary,4493504},
{code,7960564},
{ets,489944},
{maximum,402598426}]
这是一个 64 位系统。如您所见,“系统”部分有约 270MB,而“进程”约为 100MB(夜间下降至约 16MB)。