Как настроить memprof в приложении Rails 3?
(Прежде всего, я не говорю по-английски так хорошо, как хотел бы, надеюсь, вы простите мои ошибки:S)
Я очень новичок в Ruby и Rails, и я очень смущен и расстроен из-за утечек памяти, которые возникают в моем приложении, когда оно работает в производственном режиме.
Мой сервер закрывает мое приложение, потому что оно достигает 800 МБ памяти:O Я зашел в Google и нашел, что одним из решений является использование инструмента для поиска утечек: Bleackhouse (мне не удалось установить приложение) или memprof (никаких проблем по его установке) .
Я устанавливаю Memprof с:
$ gem install memprof
После установки я мог бы использовать его с "irb" и протестировать его, но я не могу заставить его работать с моим приложением Rails 3, я знаю, что это потому, что я очень новичок с Rails:(
Я прочитал слишком много веб-сайтов, статей и слайдов о memprof, но я не нашел ссылок, объясняющих, как установить его в 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'
...
Я действительно не знаю, почему я могу запустить Memprof в IRB, но я не могу использовать его с моим приложением Rails.
Изменить 1:
Я делаю советы, которые дает Фредерик Чунг, и теперь я его запустил, но я не знаю, как его запустить и записать данные в файл json: S
Буду очень признателен, если кто-нибудь сможет мне помочь с этим вопросом.
Благодарю.
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)