簡體   English   中英

在Ruby on Rails項目中查找內存泄漏

[英]Find memory leak in a Ruby on Rails project

我有一個Ruby on Rails項目,似乎是一個內存泄漏。 它一直使用越來越多的內存,直到它崩潰。 使用ObjectSpace轉儲每個類的對象數量我發現了這個:

Name                                                              Count
-----------------------------------------------------------------------
String                                                           649476
Hash                                                              59695
Array                                                             39407
ActiveSupport::Multibyte::Codepoint                               19337
FileNode                                                          17134
Time                                                               3391
Regexp                                                             1944
ActionController::Routing::DividerSegment                          1743
Proc                                                               1597
Gem::Version                                                       1545
Class                                                              1503
Gem::Requirement                                                   1479
ActiveRecord::DynamicFinderMatch                                   1021

我相信FileNode是個問題。 這是一個模型。 任何想法如何找到保存17k FileNodes的引用?

這是使用Ruby 1.8.6和Rails 2.2.0。 不幸的是,升級不是一種選擇。

Charles Oliver“Headius”Nutter最近撰寫了一系列關於使用JVM工具調試Ruby內存泄漏的博客文章:

IIRC,JRuby社區的其他成員同時也在同一主題上發布了幾篇其他博客文章。

他們的基本論點(盡管他們過於禮貌而不是這樣說法)是使用JRuby以外的任何東西來調試內存泄漏只是簡單的愚蠢,僅僅因為JRuby可以使用比所有 Ruby更多的工程工作量的Java工具分析工具在一起 Ruby社區免費獲取這些工具,因為所有企業Java無人機都在為它們付費。

您可能希望查看演示文稿“垃圾收集和Ruby堆”:

http://www.scribd.com/doc/32718051/Garbage-Collection-and-the-Ruby-Heap

從幻燈片26開始,解釋了各種有用的工具(ltrace,bleak_house,memprof等)。

我想你會發現Aman Gupta的Debugging Ruby非常有幫助。 他一直致力於在Rails 3中查找和修復內存泄漏,因此他的調試技術肯定會有所幫助。

http://www.scribd.com/doc/23548865/Debugging-Ruby

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM