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