2011-09-30 53 views
4

在調查長時間運行的perl程序內存泄漏時,我嘗試使用Test::LeakTrace來自匹配運算符的Perl內存泄漏

看着它報告我可以縮小泄漏的代碼只是泄漏的一個:那麼運行

/$?/ 

perl -MTest::LeakTrace::Script -e'/$?/'打印:

泄露從-e線1標量(0x10d3d48)。

爲什麼這是我需要擔心的嗎?

更新:也試過Devel::LeakTrace::Fast,它不抱怨相同的代碼。

+1

'測試:: LeakTrace'簡化版,像正則表達式: perl的-MTest :: LeakTrace ::腳本-E '我的正則表達式$ = QR/ABC /' 泄露從-e 1號線陣列(0x193cd80) 從-e行1泄露HASH(0x195d730)。 從-e行1泄露SCALAR(0x195d700)。 –

+0

@MarcoDeLellis所以你認爲這是Test :: LeakTrace中的一個錯誤? – Zitrax

+0

我沒有任何錯誤int模塊的證明,但它讓我思考誤報。也許在你的代碼中有循環引用,或者有一箇舊的模塊版本泄漏內存,因爲它發生了[對我](http://stackoverflow.com/questions/6438266/memory-leaks-in-listmoreutils-each- array-and-each-arrayref)。 –

回答

2

假設你有泄漏。然後這樣的:

perl -e'/$?/ for 1..1E9' 

應該讓你的程序在內存中

ps -o rss,vsz <PID> 

對我來說,它增長保持穩定的所有道路。你應該檢查它的設置。這可能是你的模塊檢測到的泄漏是一些晚期的破壞。你可以寫一個紙條給模塊的作者,以幫助你找出它的輸出,你可以幫助他們改善它。

BTW另一件事證實了我「無泄漏」是對

perl -MTest::LeakTrace::Script -e'/$?/ for 1..1000' 

我沒有看到多個泄漏的標量,只有一個。