2
我試圖用eprof剖析一個Erlang應用程序。結果表明,大部分時間都花在字典模塊中雖然我最感興趣的分析模塊不直接使用字典,它的依賴做到這看起來有點像這樣:EProf Erlang剖析
A-- B - dict
|- C - dict
A是正在運行的進程(一個gen_server)並使用模塊B和C都使用字典。我怎樣才能知道哪個模塊最多使用字典?
我試圖用eprof剖析一個Erlang應用程序。結果表明,大部分時間都花在字典模塊中雖然我最感興趣的分析模塊不直接使用字典,它的依賴做到這看起來有點像這樣:EProf Erlang剖析
A-- B - dict
|- C - dict
A是正在運行的進程(一個gen_server)並使用模塊B和C都使用字典。我怎樣才能知道哪個模塊最多使用字典?
爲了解決類似的問題,我創建了從dbg trace格式到callgrind格式的轉換器。它幫助我使用kcachegrind作爲具有時間成本信息的函數調用層次結構的可視化器。
這裏是視圖幫助尋找在那裏的時間都花在 https://raw.github.com/virtan/eep/master/doc/sshot6.png
你可以嘗試調整兩個模塊,而不是使用orddict的一個例子嗎?如果你嘗試每種方式(B/dict + C/orddict,然後B/orddict + C/dict),你可能有足夠的信息來回答這個問題。 – macintux
有趣的方法,但我設法解決這個問題,而不使用fprof來更改代碼,它顯示了函數(包括調用)和其他有用的東西(如gc和進程暫停)所花費的總時間。如果任何人有任何其他要添加的問題,請保留此問題。 –
你可以嘗試使用[this escript](https://github.com/isacssouza/erlgrind)我寫到將fprof輸出轉換爲callgrind輸出,並用kcachegrind或類似的東西將其可視化。 – Isac