2009-06-18 5 views
0

私はSlicehostの256スライス上にあり、ApacheとPassengerを実行してRailsアプリケーションをホストしています。 私はハード・リブートを頻繁にやらなければなりませんでした。私はこの旅客の記憶を見ました。RailsとPassengerが私の記憶を食べるのはなぜですか?

--------- Passenger processes --------- 
** [out :: welcometonewnepal.com] PID Threads VMSize Private Name 
** [out :: welcometonewnepal.com] --------------------------------------- 
** [out :: welcometonewnepal.com] 8246 11  <b>84.1 MB 0.1 MB /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/ApplicationPoolServerExecutable</b> 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/bin/passenger-spawn-server /usr/bin/ruby1.8 /tmp/passenger.4217 
** [out :: welcometonewnepal.com] 8247 2  <b>57.1 MB 0.2 MB Passenger spawn server</b> 
** [out :: welcometonewnepal.com] 8903 1  <b>185.6 MB 9.6 MB Passenger ApplicationSpawner:</b> /home/deploy/rails_apps/welcometonewnepal/production/current 
** [out :: welcometonewnepal.com] 9065 1  <b>195.1 MB 76.6 MB Rails:</b> /home/deploy/rails_apps/welcometonewnepal/production/current 
** [out :: welcometonewnepal.com] ### Processes: 4 
** [out :: welcometonewnepal.com] ### Total private dirty RSS: 86.43 MB 

サイズを太字で見て、なぜそれほどメモリを食べるのですか?

答えて

4

これらの統計情報だけでは確かに言えません。

しかし、下にそれを助けるために:

  • 使用nginxの使用
  • アパッチ以上のRuby Enterprise Editionのは - あなただけの1.8.6/7定期的に使用しているように見える...それはすぐそこに無駄なメモリです

また、あなたのアプリにはたくさんの宝石やプラグインがありますか?

+0

+1 for RubyEE乗客はそれがなければほとんど役に立たない。 NginXは急速に高速化していますが、Apacheは(IMO)使いやすくなっています。 –

+0

REEの場合は+1です。 –

+0

私はすでにREEを使用しています! – Autodidact

4

これほど多くのメモリを占有していない...注目すべき列は、「プライベート」とマークされた列です。
これらをすべて追加すると、下部に表示されるので、乗客とその関連プロセスは86MBのメモリしか占めていないことがわかります。そのほとんどはあなたのアプリケーションのサイズ(76MB)で占められています。

サーバー上で実行中の他のものをお知らせください。htopをインストールし、メモリで並べ替えてアイデアを得ることができます。

0

64ビット環境で実行している場合は、32ビットに切り替えてみてください。 Rails/Rubyは、32ビット環境でメモリを使用する傾向があります。

+1

なぜですか?私がそれについて読むことができるすべての参照? –

+0

すべてのポインタが2倍大きくなっています。それは簡単です... – lzap

0

Apacheまたはデータベースの設定を調整しましたか?私はWordpressのブログ+小さなRailsアプリが、デフォルトのUbuntu設定で256MBのスライスにはあまりにも多くなることを発見しました。

アパッチ(プリフォークMPM)で以下の設定を試してみてください。私の場合は

#KeepAlive On 
KeepAlive Off 
MaxKeepAliveRequests 100 
KeepAliveTimeout 4 

<IfModule prefork.c> 
StartServers  5 
MinSpareServers 5 
MaxSpareServers 10 
MaxClients   40 
MaxRequestsPerChild 1 
</IfModule> 

、私は25にMaxClientsのダウンをさらに調整しなければならなかった私はから週に2-3スワップ警告メールを取得するために使用Slicehost、私は設定を切り替えてから2週間で何も受け取っていない。 WorkerMPMフォークを使用している場合は、設定が異なります。

MySQLを使用している場合は、InnoDBを使用しない場合はInnoDBテーブルを無効にしてください。それはあなたにかなりのメモリを節約することができます。

+0

私は、Prefork cozの代わりに以下の設定でMpmWorkerモジュールを使用しました。

  \t StartServers 1 \t MaxClients 10 \t MinSpareThreads 1 \t MaxSpareThreads 1 \t ThreadsPerChild 10 \t MaxRequestsPerChild 50000 \t ThreadStackSize 500000  
Googleでレールを使ってApacheのチューニングを行う場合は、ほとんどがMpmWorkerを使用します。 – Autodidact

関連する問題