web-dev-qa-db-ja.com

サーバーがスワップしていますが、どうすれば修正できますか?

私は自分のサイトにslicehost.com256MBホスティングを使用しています。

残念ながら、ほとんど常に交換しています。コンソールにfreeと入力すると、次のようになります。

            total       used       free     shared    buffers     cached
Mem:        251140     228968      22172          0        596      17356
-/+ buffers/cache:     211016      40124
Swap:       524284      60944     463340

サーバーをrebootすると、スワッピングは少し停止してから再開します。

どうやって:

1)どのプロセス/機能がスワッピングを引き起こすかを把握する

2)問題を解決する方法

3)256MBが少なすぎるかどうか、および最適化ではなくアップグレードの時間を把握する

ありがとう

// CakePHP/Apacheを使用

1
mgPePe

1)ps auxを試して、/proc/$pid/status/proc/$pid/smapsを確認します。

2)メモリを追加します。

3)現在の負荷を考えると、256MBは明らかに少なすぎます。

6
Chopper3

誰が戦っているのかを診断するために、 atop をインストールすることをお勧めします。上部には、プロセスレベルの変更が表示されます。簡単なデモンストレーションのために、MySQLが利用可能なすべてのメモリを使用するように準備し、次にいくつかの大きなファイルを操作して、大きなテストファイルをキャッシュするためにMySQLメモリを強制的にスワップアウトしました。以下は、MySQLがスワップからメモリを読み戻そうとしていることを示すスクリーンショットです(ハイライトを確認できるように、テキストではなく画像)。

MySQLがスワップアウトされたものに到達しようとすると、majfltとminfltの番号に注意してください。他のメモリ統計や、top、psなどから取得したいものはすべて表示できます。{apt-get、yum} install atop

atop showing majflt and minflt

2
Jeff Ferland

Apacheを使用していますか?

その場合は、次のようにしてください。

  • トップを開く(端末でトップと入力するだけ)
  • Shift Mを押して、メモリ消費順に並べ替えます
  • 列RESで、Apacheインスタンスが予約しているメモリの量を確認できます

プロセスごとに20Mbを消費しているとしましょう。

次に、簡単な計算を行います。 SO用に156Mbを確保し、残りの100を1つのApacheが消費しているメモリの量で除算します:100/20 = 5

これにより、同時に実行できるApacheプロセスの数がわかります。

次に、Apache構成(/ etc/Apache2)に移動し、メイン構成ファイル内で次の設定を見つけます。-StartServers-ServerLimit-MaxClients

そして、それらすべてを5に設定します。

256はApacheのセットアップには小さすぎることに注意してください。 2Gb未満のメモリでApacheを実行することはありません。

2
Leon Waldman

スワップピネスを下げることができます。最初にcat/proc/sys/vm/swappininessで現在の値を確認してから、値を変更しますsysctl -w vm.swappiness = 1

また、Sudo swapoff aまたは/ etc/fstabを編集して、いつでもスワップを無効にすることができます。

最近では、あなたのような小さなVMでも、スワップを使用することはめったにありません。

1
tarzxvf

Apacheのメモリ使用量を減らすことはできますが、それは簡単ではありません。

  • サーバーで必須でないサービスを無効にします。
  • worker MPM module with PHP as FastCGI(it is notcompatible with PHP as a module)。
  • 適度な数のMaxClientを使用するようにワーカーモジュールを構成します(たとえば、MaxClients 64)および適度な数のスレッド(たとえば、ThreadsPerChild 32)。
1
Tometzky
  1. それはPHPです。

  2. メモリを追加するか、同時PHPプロセスの数を減らします

  3. それほど多くはありません。

1
adaptr
  1. 大量のスワッピングが発生したときに、発行してどのプロセスがどのくらいのメモリを消費しているかを調べてみませんか。

  2. どのプロセスが健全なメモリを消費しているかを見つけたら、問題を修正する方法についての最初のステップになるはずです。例えば。 mysqlクエリが大量のメモリを使用している場合は、mysqlサーバーのメモリを制限するか、クエリの最適化を行う可能性があります。

  3. 256MBは本当に小さいようです。あなたがApacheについて言及し、Apacheにはデフォルトでプリフォークモードの操作が付属していることを知っているので、それが本当の原因である可能性があります。必要なモジュールのみを起動して(通常、Apacheには多数のモジュールが自動的に起動する)ワーカーモードでApacheを実行するか、Apache全体を軽量のNginxに置き換えることを検討してください。

0
kaji