2010-09-27 73 views
3

我有以下Ruby腳本:很簡單的Ruby GServer內存泄漏

 
class Server < GServer 

    def initialize  
    super(10001) 
    end 


    def serve(io) 
    while true 
    io.puts `ps -o rss= -p #{$$}`.to_i 
    end 
    end 

end 

server = Server.new 
server.start 

while true 
    sleep 10 
end 

當我打開一個到服務器的連接,它顯示增加的內存使用隨着時間的推移,我沒有打開任何新的連接或做什麼都沒有。

我做錯了什麼,或者在GServer中是否存在內存泄漏問題?

順便說一句:我在MacOSX上用Ruby 1.8.7和Debian系統用1.9.2測試了它。

+0

它泄漏到你的系統上多少錢? – 2010-09-27 22:04:12

+0

剛開始的時候,這個過程大約有4kB,10分鐘後大約16kB – fresskoma 2010-09-27 22:05:23

+0

它似乎永遠在io中存儲內存量,所以也許從外部使用top監視它,看看是否有泄漏。事實上,泄漏只是您每次服務器有機會運行時都會將輸出放入輸出中。 – 2010-09-27 22:09:20

回答

3

16kb並不一定意味着內存泄漏。如果你有一個真正的內存泄漏,它會隨着時間的推移而上升到幾百MB。這就是說你可以使用mem-prof和valgrind查找內存泄漏。