为 Rails 项目的一部分配置内存性能

Posted

技术标签:

【中文标题】为 Rails 项目的一部分配置内存性能【英文标题】:Profile memory-performance for part of an rails project 【发布时间】:2010-03-29 14:45:05 【问题描述】:

我想测试我的 rails 项目的一个重要库类的配置文件使用情况。它使用 ActiveRecord,所以我需要所有 rails 依赖项来分析它。

据我所知,我需要一个修补过的 ruby​​ (rubygc),以便脚本/配置文件和脚本/基准可以跟踪内存使用情况。我尝试关注 this official guide 来修补 ruby​​ 1.8.6 (p399) 和 1.8.7 (p248) 的源代码,但都失败并显示以下消息:

patching file gc.c
Hunk #2 succeeded at 50 with fuzz 2 (offset 2 lines).
Hunk #3 succeeded at 87 with fuzz 2 (offset 6 lines).
Hunk #4 succeeded at 153 with fuzz 1 (offset 45 lines).
Hunk #5 succeeded at 409 with fuzz 2 (offset 274 lines).
Hunk #6 FAILED at 462.
Hunk #7 FAILED at 506.
Hunk #8 FAILED at 520.
Hunk #9 FAILED at 745.
Hunk #10 FAILED at 754.
Hunk #11 FAILED at 923.
Hunk #12 succeeded at 711 (offset 46 lines).
Hunk #13 succeeded at 730 (offset 46 lines).
Hunk #14 succeeded at 766 (offset 55 lines).
Hunk #15 succeeded at 1428 (offset 87 lines).
Hunk #16 succeeded at 1492 (offset 89 lines).
Hunk #17 FAILED at 1541.
Hunk #18 FAILED at 1551.
Hunk #19 succeeded at 1571 (offset 91 lines).
Hunk #20 succeeded at 1592 (offset 91 lines).
Hunk #21 succeeded at 1601 (offset 91 lines).
Hunk #22 succeeded at 1826 (offset 108 lines).
Hunk #23 succeeded at 1843 (offset 108 lines).
Hunk #24 succeeded at 1926 (offset 108 lines).
Hunk #25 succeeded at 2118 (offset 108 lines).
Hunk #26 succeeded at 2563 (offset 100 lines).
Hunk #27 succeeded at 2611 with fuzz 1 (offset 102 lines).
Hunk #28 succeeded at 2628 (offset 102 lines).
8 out of 28 hunks FAILED -- saving rejects to file gc.c.rej
patching file intern.h
Hunk #1 succeeded at 268 (offset 15 lines).

我也尝试使用 ruby​​-prof,但我总是收到错误“未初始化的常量 RubyProf::Test”。我不知道如何使用 gem "memory" 并且 "memprof" 和 "bleak_house" 都无法成功安装。

如果我运行了一个修补过的 ruby​​,我应该没问题。但是任何其他分析库类内存的可能性都是受欢迎的。感谢您的帮助!

【问题讨论】:

【参考方案1】:

我也总是遇到 ruby​​-prof 的错误。 profile_test_helper.rb 中有一个错误。如果您将第 17 行更改为“require 'ruby-prof/test'”,它应该可以工作。

http://github.com/jeremy/ruby-prof/issues#issue/5

【讨论】:

哇,这帮了大忙!修复了我的问题。抱歉回复晚了,但同时使用了 ps 的解决方法。非常感谢!【参考方案2】:

如果你在 Windows 上,你可以试试Ruby Memory Validator。

您也可以尝试原始的Ruby Memory Tracking API,其中一些是源自其他的。这适用于任何平台 - 但您必须自己构建 Ruby(并自己从 C/C++ 调用 API)。

【讨论】:

以上是关于为 Rails 项目的一部分配置内存性能的主要内容,如果未能解决你的问题,请参考以下文章

对于 Rails 和 GraphQL 项目,如何定义多个同名查询?

Ruby on Rails,将项目范围的单引号转换为双引号

Ruby on Rails全栈课程5.1 项目上线--购买服务器域名

减少 Mongrel Rails 内存占用并提高性能?

内存中的对象可以在 Rails 中进行关联吗?非传统形式视图

使用 AJAX 刷新 Rails 部分时的未定义方法