2012-12-03 74 views
1

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

回答

0

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

{内存,大小}: 大小是在这个过程中的字节数。这包括致电 堆栈,堆和内部结构。

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

谢谢Syhpoon,明天我会试一试,让你知道。 –

0

与调用memory()从外壳到学习,如果它是二进制文件,ETS,流程等内存被保持刚开始。接下来,如果一个过程是罪魁祸首,你可以问像etop这样的工具来给你使用最多内存的进程。这通常可以找出问题所在。

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