0

(まず第一に、私は自分が望むほど英語を話せません。間違いを許してほしいです :S )

私は Ruby と Rails の初心者であり、アプリケーションをプロダクション モードで実行するとメモリ リークが発生するため、非常に混乱し、不満を感じています。

メモリが 800MB に達したため、サーバーがアプリをシャットダウンしています :O Google で調べたところ、リークを見つけるツールを使用することが 1 つの解決策であることがわかりました: Bleackhouse (アプリケーションをインストールできませんでした) または memprof (インストールに問題はありません)。

memprof を次のようにインストールします。

$ gem install memprof

インストールしたら、「irb」で使用してテストできますが、Rails 3アプリケーションで実行することは不可能です.Railsの新人だからです:(

memprof に関するウェブ、チュートリアル、スライドを読みすぎましたが、Rails にインストールする方法を説明する参考文献が見つかりません。

これらの行を config/environment.rb に追加します

require `gem which memprof/signal`.strip

config/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:

私は Frederick Cheung のアドバイスを実行しましたが、実行できるようになりましたが、開始してデータを json ファイルに書き込む方法がわかりません:S

誰かがこの問題で私を助けることができれば、私は非常に感謝しています.

ありがとう。

4

1 に答える 1

1

シグナル関連のものを使用すると、URGシグナル(kill -s URG pid)を送信するだけで、/tmp内のファイルに書き込まれます。

memprofに含まれているミドルウェアを使用することもできます(ドキュメントを参照してください)

2つのミドルウェアがあり、各リクエストを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 に答える