2016-02-03 57 views
-1

我有一個perl程序(/usr/bin/ckbcomp)在新安裝的debian v8服務器上執行非常緩慢。我在調試啓動時間很長的時候發現了它。非常慢的Perl腳本執行時間

我比較了這個腳本在另一個沒有這個問題的服務器上的執行情況,我最終得出結果他們有確切的內核空間執行,並且問題似乎來自用戶級代碼,寫在perl的。

# slow execution 
$ uptime 
14:54:16 up 3:19, 1 user, load average: 0.00, 0.01, 0.05 
$ time ckbcomp -backspace bs -model pc105 us 
real 0m1.927s 
user 0m1.900s 
sys  0m0.016s 

# normal execution 
$ uptime 
14:49:31 up 12 days, 17:19, 1 user, load average: 0.00, 0.03, 0.09 
$ time ckbcomp -backspace bs -model pc105 us 
real 0m0.381s 
user 0m0.376s 
sys  0m0.000s 

你可以看到時間花在用戶空間上。 strace輸出大致相同,並確認time輸出(相同數量的系統調用,相同的開銷和在內核空間中花費的時間幾乎相同)。 uptime是用來顯示你的CPU負載,所以這不是一個過載問題。

所以我假設問題來自perl執行本身,ltrace大多證實它,給花費在perl_run()

我現在不知道如何進一步調試debian v8上的perl程序。類似ltrace的解決方案應該足夠了解時間花在哪裏。

perl解釋器在兩臺機器上都是一樣的。也許它來自安裝的庫...

謝謝您的幫助

+1

谷歌「perl探查器」,看看那裏的perl的一些分析軟件包... –

+0

不可能是硬件問題嗎?祝你好運。 – shellter

回答

3

好了,我不能直接回答,因爲我沒有我的系統上的腳本。

但是總的來說 - 你應該看看那個perl,看看它在做什麼。

我會以您已經提到的起點 - strace爲例。 strace -fTt將繼續分叉,所以應該報告由perl所做的系統調用。

但是,如果這樣做訣竅 - Devel::NYTProf將能夠告訴你關於你的代碼如何運行以及它在做什麼(以及它在哪裏花費時間)的相當數量。運行該程序,然後檢查一些正在緩慢運行的代碼。