我需要提高我的Perl應用程序的性能。我怎樣才能找到慢點?如何分析我的Perl程序?
這是來自official perlfaq的問題。我們是importing the perlfaq to Stack Overflow。
我需要提高我的Perl應用程序的性能。我怎樣才能找到慢點?如何分析我的Perl程序?
這是來自official perlfaq的問題。我們是importing the perlfaq to Stack Overflow。
(這是official perlfaq answer,減去任何後續編輯)
的Devel
命名空間有幾個模塊,你可以用它來 配置您的Perl程序。該Devel::DProf模塊配備了Perl和您可以用-d
開關調用它:
$ perl -d:DProf program.pl
DProf
下運行程序後,你會得到一個tmon.out文件 與分佈數據。爲了看一下數據,你可以使用隨 Devel::DProf
的dprofpp
程序把它變成一個 人類可讀報告:
$ dprofpp
你也可以做剖析,並在一個步驟與-p
開關報告到dprofpp
:
$ dprofpp -p program.pl
的Devel::NYTProf(紐約時報探查)同時做兩語句和子程序剖析。您可通過CPAN,您還調用 它與-d
開關:
$ perl -d:NYTProf some_perl.pl
像DProf
,它創造的,你 可以變成報告的配置文件信息的數據庫。該nytprofhtml
命令將數據分成 類似Devel::Cover報告的HTML報告:
$ nytprofhtml
CPAN有,你可以在同一 時尚調用其他幾個剖析。您可能也有興趣使用C to 度量和比較代碼片段。
你可以閱讀更多有關分析在的Perl編程,第20章, 或掌握的Perl,第5章
perldebguts文檔中創建一個自定義的調試器,如果你需要創建 探查的一種特殊。 brian d foy描述了的Perl日記,"Creating a Perl Debugger"和"Profiling in Perl"的過程 。
Perl.com有兩篇關於剖析的有趣文章:Simon Cozens的"Profiling Perl", 和Frank Wiles的"Debugging and Profiling mod_perl Applications"。
Randal L.施瓦茨寫關於"Speeding up Your Perl Programs"分析爲Unix的審查和"Profiling in Template Toolkit via Overriding"爲Linux雜誌。
有找到慢點,所以你可以提高你的程序的性能非常簡單的方法 - random-pausing。
基本上,這個想法是,而不是衡量,看看哪些部分是緩慢的,你讓其緩慢將其暴露給你。
使用調試標誌-d
運行程序,並在程序運行時手動中斷程序,並顯示調用棧(T
)。這樣做幾次,如5或10.查找出現在多個堆棧和上的任何語句,這些語句不是嚴格必要的,因爲它負責的時間大約是顯示它的堆棧的百分比。
這不僅發現熱點,而且還發現其中功能被稱爲昂貴的行。無論程序是I/O還是CPU綁定,它都能正常工作,並且與機器中的其他功能無關。
你可以做多次,直到你找不到可以加速的東西。
我切換到使用Devel::NYTProf,這是所有最好的Perl剖析相結合,最初在紐約時報的鄉親。
雖然我承認這種技術將工作,這是非常高效的,容易出錯不佳擴展到大的代碼庫,它不會幫助你決定是否更改真正幫助您的程序或只是轉移周圍的瓶頸。爲了減少工作量,真正的輪廓運行將揭示更多細節,並且可能更具可重複性。 – 2010-12-08 18:32:21
@ Ven'Tatsu:這是你所知道的,還是你想要想的?事實上,它非常高效,不易出錯,在更大的代碼基礎下工作更好,找到真正的「瓶頸」,爲您提供正確的細節,並且可根據需要重現。 [這裏是更多的主題。](http://stackoverflow.com/questions/4387895/if-profiler-is-not-the-answer-what-other-choices-do-we-have/4390868#4390868) – 2010-12-08 19:11:08