2012-12-03 76 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調整來解決。