2

CPU 消費に問題がある Rails 3.0 アプリケーションがあります。

このアプリケーションは、Debian マシン上の Apache + パッセンジャー mod でプロダクション モードで動作します。6 Gb RAM と 2 CPU (1 コア 3 GHz) を備えた仮想マシンです。これはメーリング アプリケーションであり、リンクをクリックしてメールを読むだけで、サーバー上で一連の操作を実行してページをレンダリングする必要があります。この単純なクリックには、2 ~ 3 秒間で約 50% の CPU が必要です (「top」コマンドで確認できます)。

問題は、システムに約 150 人のユーザーがいて、Postgresql データベースが同じマシンにインストールされていることです。複数のユーザーが同時に操作を行うと、CPU が 100% 使用され、Postgresql には要求を受け入れるのに十分なリソースがあります。

CPU の増加と Postgresql のクラッシュを防ぐために (Apache? Passenger? Rails?) できる構成はありますか? 2 つの CPU にジョブを割り当てることはできますか (既に割り当てられているかどうかはわかりません)。

前もって感謝します。

レミ

編集 :

ruby プロセスがジョブにメモリを割り当てているようです。しかし、ジョブが終了すると、割り当てられたメモリは解放されないようです。

4

3 に答える 3

0

あなたの言うことから、あなたの最善の選択肢は、おそらく接続プーラーを使用して、できる限り同時接続数を減らすことです。これにより、PostgreSQL のメモリが少なくなりますが、さらに重要なことに、セマフォとディスク I/O の待機が少なくなるため、スループットが向上します。結局のところ、プロセッサとハード ドライブが一度にできることは限られています。始めるのに適した場所は、CPU コアの 2 倍とディスク スピンドルの数です。

Ruby 側では、これはガベージ コレクションの問題のように思えます。より多くの情報なしで言うのは難しいですが、これは Web アプリであり、接続が長時間アイドル状態になる可能性は低いため、同時 PostgreSQL 接続の数を減らすことから始めます。

于 2013-05-14T09:29:14.743 に答える
0

言い忘れていましたが、メモリ使用量も CPU とともに増加します。

私のRailsログには、次のようなエラーがあります:

ActiveRecord::StatementInvalid (PG::Error: FATAL: arrêt des connexions suite à la demande de l'administrateur FATAL: arrêt des connexions suite à la demande de l'administrateur

シグナル例外 (SIGTERM)

そのため、リクエスト (select、insert、...) は Postgresql によって拒否されます。問題が発生している間、Postgresql のログは空です (Postgresql は、ログに書き込むためのリソースがない場合、ログに書き込むことができないためだと思います)。

于 2013-04-05T06:03:50.767 に答える
0

postgreSQL は実際にクラッシュしますか? それは非常に奇妙です。非常に遅いと思いますが、クラッシュすることはありません。他にも問題があるかもしれません...

postgresqlデーモンの優先度を上げるか、レールアプリの1つを下げることができるはずです:) Unix / Linuxでは、nice(ルートとして)を使用してpostgresqlサーバーの優先度を上げることができます(CPUを取得できるようにするため) Railsアプリではなく、必要です)。

于 2013-04-04T12:38:48.193 に答える