【问题标题】:How can I get beam size for Erlang?如何获得 Erlang 的光束大小?
【发布时间】:2012-11-21 12:10:09
【问题描述】:

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

【问题讨论】:

    标签: erlang gen-server beam


    【解决方案1】:

    只需从 shell 调用 memory() 开始,以了解它是否在二进制文件、ets、进程等内存中被保留。接下来,如果某个进程是罪魁祸首,您可以要求etop 之类的工具为您提供使用最多内存的进程。这通常可以找出问题所在。

    如果问题是 ETS 或二进制文件,那么由于其中包含子二进制指针,您可能会长时间保留某些大型二进制文件。这需要 GC 调整来解决。

    【讨论】:

      【解决方案2】:

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

      {内存,大小}: Size 是进程的字节大小。这包括调用 堆栈、堆和内部结构。

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

      【讨论】:

      • 谢谢Syhpoon,我明天试试,告诉你。
      猜你喜欢
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多