1

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

4

2 回答 2

0

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

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

于 2012-12-05T15:53:53.183 回答
0

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

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

process_info(self(), memory).   
{memory,17128}
于 2012-12-04T00:17:33.273 回答