如何获得Erlang的光束大小?

时间:2012-12-03 22:53:04

标签: erlang gen-server beam

我有一个需要优化的遗留Erlang程序。这段代码在运行时使用高达20G的内存。我想知道是否有办法在运行时获得进程本身的Erlang Beam大小?如果可以,那么我可以做一些事情,如果光束大小> 10GB,然后拒绝所有对gen_server进程的调用。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

也许您可以使用一些proces_info数据:

  

{记忆,大小}:                     Size是进程的字节大小。这包括电话                     堆栈,堆和内部结构。

process_info(self(), memory).   
{memory,17128}

答案 1 :(得分:0)

首先从shell调用memory()来了解它是否在二进制文件,ets,进程等内存中。接下来,如果进程是罪魁祸首,您可以要求像etop这样的工具为您提供使用最多内存的进程。这通常可以追踪问题。

如果问题是ETS或二进制文件,那么由于其中的二进制二进制指针,您可能会长时间保留某些大型二进制文件。这需要GC修改来修复。