2017-04-18 14 views
0

私は、Rails 4アプリケーションをUbuntu 14.04.5 LTSを使用してDigital Oceanに配備しました。アプリは正常に動作するようですが、システムは常に95%のメモリで動作します。私はさらに2倍のRAMに液滴をアップグレードし、それはまだ95%です。私はレールのアプリのメモリ最適化のブログ記事などのトンがある知っているRailsアプリケーションSidekiq高メモリ使用

top - 11:03:54 up 8:37, 1 user, load average: 0.00, 0.03, 0.05 
Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem: 2049956 total, 1980616 used, 69340 free,  8708 buffers 
KiB Swap: 1048572 total, 1036928 used, 11644 free. 47864 cached Mem 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND                                        
7510 ubuntu 20 0 780436 274428 2540 S 0.0 13.4 0:27.66 ruby                                         
1313 root  20 0 1921472 250948 2700 S 0.0 12.2 1:42.70 bundle                                         
1315 root  20 0 1876992 246204 2664 S 0.0 12.0 1:44.10 bundle                                         
1359 root  20 0 1928636 236168 2692 S 0.0 11.5 1:42.58 bundle                                         
6408 ubuntu 20 0 781764 175368 2244 S 0.3 8.6 1:10.81 ruby                                         
8681 ubuntu 20 0 984140 156708 1884 S 0.3 7.6 1:37.95 ruby                                         
8810 ubuntu 20 0 646824 117356 2548 S 0.0 5.7 0:11.07 ruby                                         
8821 ubuntu 20 0 646920 112728 2532 S 0.0 5.5 0:11.48 ruby                                         
8797 ubuntu 20 0 646728 82372 2960 S 0.0 4.0 0:14.33 ruby                                         
1932 ubuntu 20 0 332292 56948 1552 S 0.0 2.8 0:04.88 ruby 

は、ここに私のトップ出力されます。 3つのバンドルプロセスは私を混乱させるものです。私のアプリ(実際には2つのアプリケーション - 1つのプロダクションと1つのステージング)は、バンドルプロセスであるRedis/Sidekiqを使用します。だから私の質問は次のとおりです:

1)これは「正常」ですか?

2)そうでない場合は、これをトラブルシューティングする方法がありますか?私は、サーバーと1つのステージングに2人の生産労働者を持っているのを忘れ

[email protected]:~$ ps aux --sort=-%mem 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root  1291 8.8 9.4 846856 194624 ?  Sl 18:04 0:23 sidekiq 4.2.10 production [0 of 3 busy]                     
root  1411 8.9 9.4 846824 194532 ?  Sl 18:04 0:24 sidekiq 4.2.10 production [0 of 3 busy]                     
root  1272 9.1 9.4 712752 193516 ?  Sl 18:04 0:24 sidekiq 4.2.10 staging [0 of 1 busy]                     
ubuntu 2254 0.6 9.3 645792 192648 ?  Sl 18:05 0:01 Passenger RubyApp: /home/ubuntu/production/current/public (production) 
ubuntu 1986 0.6 9.3 645048 192064 ?  Sl 18:05 0:01 Passenger RubyApp: /home/ubuntu/staging/current/public (staging) 
ubuntu 1762 9.8 9.2 375520 190264 ?  Sl 18:04 0:24 Passenger AppPreloader: /home/ubuntu/production/current 
ubuntu 1678 9.5 9.2 374872 189588 ?  Sl 18:04 0:25 Passenger AppPreloader: /home/ubuntu/staging/current  
ubuntu 2082 0.2 9.1 645144 187524 ?  Sl 18:05 0:00 Passenger RubyApp: /home/ubuntu/staging/current/public (staging) 
ubuntu 1839 2.9 3.9 197300 79976 ?  Sl 18:04 0:06 Passenger AppPreloader: /home/ubuntu/landing/current  
ubuntu 1962 0.1 3.8 332292 78720 ?  Sl 18:05 0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production) 
ubuntu 1969 0.0 3.7 332388 76044 ?  Sl 18:05 0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production) 

UPDATEここ

はトップ出力されます。私は5と2で並行性を持っていましたが、私はそれを3と1に下げました。Sidekiqのやっていることは、ローレベルの画像処理と一括レコード作成、更新と削除です。ページの読み込み。

私は現在80%でそれを見ています。より良いが、まだ高いようだ。私は次のコード最適化などがたくさんあると思います。私はここで見つけることができるものがたくさんあると確信しています。

+0

あなたは 'psのAU --sort =の出力を投稿することができますか?それは完全なコマンドを表示し、それらの 'bundle'プロセスが実際に呼んでいるものを確認します。また、前の液滴の 'top'出力を投稿できますか?両方の出力を比較するのに役立ちます。 – Gaston

+0

私は 'ps aux --sort = - %mem'を意味すると思っています。 –

答えて

0

あなたのRubyプロセスが多すぎるメモリを食べている理由はたくさんあります。どんな宝石やアプリのコードでも大量のメモリを割り当てることができます。なぜなら、SOがあなたにその理由を伝えることは不可能です。ここでは一つの可能​​な理由です:

https://github.com/rails/rails/issues/27002#issuecomment-260086170

+0

ありがとうございます。マイク - 私は、クリーンでリファクタリングがたくさんあることを知っています。 –

1

はあなたが実行していないどのように多くのSidekiqプロセスに目を離さない、構成された同時実行、ポーリングともあなたが使用するキューの数は何ですか。そのうちのどれかが多数あると、メモリ使用量が高くなる可能性があります。 sidekiq.ymlでこれらの値を微調整し、それらがあなたの環境に与える影響を試してみてください。詳細情報については

: - %のmem` https://github.com/mperham/sidekiq/wiki/Advanced-Options

+0

これは最良の答えです。私のコードはそれに影響しますが、並行性はこれまでのところ最大のものでした。ありがとう –

+0

Hmmmm ... WTH。それはすぐに80%に落としましたが、今すぐゆっくりと戻って95% –

関連する問題