(首先,我不会说英语,我希望你原谅我的错误:S)
我是Ruby和Rails的新手,我非常困惑和沮丧,因为我在应用程序中运行生产模式时出现内存泄漏。
我的服务器正在关闭我的应用程序,因为它达到了800MB的内存:我已经谷歌了解它,我发现一个解决方案就是使用工具来查找泄漏:Bleackhouse(我还没设法安装应用程序)或memprof(没有问题安装它)。
我安装了memprof:
$ gem install memprof
一旦安装,我就可以将它与“irb”一起使用并进行测试,但是对我来说,使用我的Rails 3应用程序运行是不可能的,我知道这是因为我是Rails的新手:(
我已经阅读了太多关于memprof的网站,tutos和幻灯片,但我找不到任何解释如何在Rails中安装它的参考资料。
我将这些行添加到我的config / environment.rb
require `gem which memprof/signal`.strip
配置/ environment.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
如果有人可以帮我解决这个问题,我将非常感激。
感谢。
答案 0 :(得分:1)
使用信号填充你只需要发送一个URG信号(kill -s URG pid)它会写入/ tmp中的文件
您还可以使用memprof包含的中间件(see the documentation
有两个中间件,允许您使用Memprof.track
或Memprof.trace_request
打包每个请求。你可以把它放在初始化器(在config / initializers中)
require 'memprof/middleware'
config.middlewares.use(Memprof::Middleware)
require 'memprof/tracer'
config.middleware.insert(0, Memprof::Tracer)