0

(首先我不会说我希望的英语,我希望你原谅我的错误:S)

我是 Ruby 和 Rails 的新手,我非常困惑和沮丧,因为我的应用程序在生产模式下运行时出现内存泄漏。

我的服务器正在关闭我的应用程序,因为它达到了 800MB 的内存:O 我用谷歌搜索过它,我发现一种解决方案是使用一种工具来查找泄漏:Bleackhouse(我还没有设法安装应用程序)或 memprof(安装没问题)。

我安装 memprof:

$ gem install memprof

安装后,我可以将它与“irb”一起使用并对其进行测试,但我不可能让它与我的 Rails 3 应用程序一起运行,我知道这是因为我对 Rails 非常陌生 :(

我已经阅读了太多关于 memprof 的网页、教程和幻灯片,但我找不到任何解释如何在 Rails 中安装它的参考资料。

我将这些行添加到我的 config/environment.rb

require `gem which memprof/signal`.strip

配置/环境.rb:

# -*- encoding : utf-8 -*-

require `gem which memprof/signal`.strip

# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
NameApp::Application.initialize!

但是当我运行我的应用程序(Apache + Phusion Passenger)时,它会抛出一个错误:

"Ruby (Rack) application could not be started"

A source file that the application requires, is missing.
It is possible that you didn't upload your application files correctly. Please check whether all your application files are uploaded.
A required library may not installed. Please install all libraries that this application requires.

Error message:
no such file to load --

/path/to/my/app/config/environment.rb   3   in `require'
...

我真的不知道为什么我可以在 irb 中运行 memprof,但我不能在我的 Rails 应用程序中使用它。


编辑1:

我做了 Frederick Cheung 给出的建议,现在我让它运行了,但我不知道如何启动它并将数据写入 json 文件:S

如果有人可以帮助我解决这个问题,我将不胜感激。

谢谢。

4

1 回答 1

1

使用信号内容,您只需要发送一个 URG 信号(kill -s URG pid),它将写入 /tmp 中的文件

您还可以使用 memprof 包含的中间件(请参阅文档

有两个中间件,允许您使用Memprof.track或包装每个请求Memprof.trace_request。您可以通过将其放入初始化程序(在 config/initializers 中)来打开它们

require 'memprof/middleware'
config.middlewares.use(Memprof::Middleware)

require 'memprof/tracer'
config.middleware.insert(0, Memprof::Tracer)
于 2012-05-11T10:56:50.330 回答