[英]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中查找和修復內存泄漏,因此他的調試技術肯定會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.