web-dev-qa-db-ja.com

VPSがクラッシュし、理由がわかりません

私は今LinodeでVPSを持っています。監視サービスから、ホストしているサイトがダウンしたという警告を受けました。エラーメッセージを確認するために、SSH接続を使用せずにSSH接続を介してコンソールに直接帯域外アクセスを取得するLinodeの方法であるLishを使用しました。これは私が見たものです:

console log

Muninログをチェックして、メモリ使用量にスパイクがあったかどうかを確認しました。実際、スワップグラフの適切なタイミングでスパイクがあります。

swap memory spike

ただし、メモリグラフにスパイクはありませんでした(スワップは上昇しているように見えますがわずかに):

memory graph, no spike

サーバーを再起動しましたが、それ以降は正常に動作しています。 Apacheのアクセスログとエラーログを確認したところ、疑わしいものは何も見つかりませんでした。サーバーを再起動する前のsyslogの最後のエントリは、IMAPデーモンのエラーであり、関連していないようです。

Oct 28 18:30:35 hostname imapd: TIMEOUT, [email protected], ip=[::ffff:XX.XX.XX.XX], headers=0, body=0, rcvd=195, sent=680, time=1803
# all of the startup logs below here
Oct 28 18:40:33 hostname kernel: imklog 5.8.1, log source = /proc/kmsg started.

Dmesgをチェックしてみましたが、疑わしいものも見当たりませんでした。最後の数行:

VFS:デバイス202:0に読み取り専用のマウントされたルート(ext3ファイルシステム)。 。]カーネルの読み取り専用データの書き込み保護:1384k 
 NX-カーネルデータの保護:3512k 
 init:コンソールの生成に失敗しました-メインプロセスのセットアップ:実行できません:そのようなファイルまたはディレクトリはありません
 udevd [1040]:バージョン173を開始
/dev/xvdbに524284kスワップを追加。優先度:-1エクステント:1全体:524284kSS 
 init:udev-fallback-graphicsメインプロセス(1979)がステータス1 
 initで終了:プリマスメインプロセス(1002)がSEGVシグナルによって強制終了されました
 init:plymouth-splashメインプロセス(1983)がステータス2で終了しました
 EXT3-fs(xvda):内部ジャーナルを使用しています
 init:plymouth-logメインプロセス(2017)が終了しましたステータス1 
 init:plymouth-upstart-bridgeメインプロセス(2143)がステータス1 
 initで終了:sshメインプロセス(2042)がステータス255 
 init:フェイルセーフメインプロセスで終了(2018)TERMシグナルによって強制終了
 init:ステータス1で終了したapport pre-start process(2363)
 init:ステータス1で終了したapport post-stop process(2371)

エラーメッセージ(kernel BUG at mm/swapfile.c:2527!)をグーグルで検索してみたところ、Xenに関連するトピックがいくつか見つかりました(LinodeはXenを使用しています)。

しかし、私が見つけた情報はどれも解決策を示していないようでした。 Linodeが提供する最新のカーネル(2.6.39.1-linode34から3.0.4-linode38)にアップグレードします。

この問題を現在、または将来再び発生する場合に診断するために私ができることは他にありますか?見逃したことはありますか?誰かがこれを引き起こしたかもしれないものについての考えを持っていますか?

他にご提供できる情報がありましたらお知らせください。トンありがとう。

3
Tom Marthenal

この問題は、Xenのバグに関連していました(質問で言及されています)。カーネルの最新バージョンに更新しています(3.0.4-linode38)問題を解決しました(カーネルバージョンを変更するまでサーバーが繰り返しクラッシュしていました)。この問題は、メモリの不足が原因ではなく、カーネルによるメモリの管理ミス(またはXenのバグ)が原因で発生したようです。

2
Tom Marthenal

システムを再起動する前または後に、Muninグラフをプルしましたか?後の場合、空白セクションの後の部分はおそらく[〜#〜] after [〜#〜]再起動したため、関係ありません。スワップの使用が劇的に減少したので、それは後だと思います...

あなたの質問では、空白のセクションを無視しています...「グラフにはメモリ使用量が増加していることは示されていません」と言いますが、実際に表示されているのは、メモリが増加している可能性が高い時間のデータではありません。 muninは優れたツールですが、5分ごとに情報を報告するだけであり、システムがビジー状態の場合は何も報告しない可能性があるため、このようなインスタンスの報告にはひどいものです。

実行できるApacheのインスタンス数のメモリ計算を実行しましたか?つまり、「ps awwlx --sort = rss | grep Apache」を実行して、各Apacheインスタンスが使用しているメモリの量を確認します。例えば:

root@theobromine:~# ps awwlx --sort=rss | grep Apache
0     0 18497 18485  20   0   1788   528 -      S+   pts/0      0:00 grep Apache
5    33 18458  5384  20   0  28468  6700 -      S    ?          0:00 /usr/sbin/Apache2 -k start
5    33 18470  5384  20   0  28468  6700 -      S    ?          0:00 /usr/sbin/Apache2 -k start
5    33 18480  5384  20   0  28468  6700 -      S    ?          0:00 /usr/sbin/Apache2 -k start
5    33 18481  5384  20   0  28468  6700 -      S    ?          0:00 /usr/sbin/Apache2 -k start
5    33 18457  5384  20   0  28468  6708 -      S    ?          0:00 /usr/sbin/Apache2 -k start
5     0  5384     1  20   0  28336 11796 -      Ss   ?          0:16 /usr/sbin/Apache2 -k start

私たちが見ているのはその8列目です。この場合、インスタンスごとに6.7MBを使用していますが、これは実際にはかなり小さいものです。しかし今、私は自分が持っているメモリの量を調べます。

root@theobromine:~# free
             total       used       free     shared    buffers     cached
Mem:        775196     643848     131348          0      77964     268788
-/+ buffers/cache:     297096     478100
Swap:      1148636       3368    1145268

だから私は800MBのRAMを持っています...今、私は数学を行うことができ、最良の場合、Apacheの800/6.7 = 119インスタンスを実行できると言うことができます。しかし、それは他のアプリケーションやOSやキャッシュなどのためのスペースを残しません...

しかし実際には、最大で478MB(「無料」の下の2番目の列)から現在実行中のApacheの量(6.7 * 6-上記で実行されているApacheインスタンスは6つしかありません)を差し引いたもので、約520MBのRAM(もちろん、キャッシュがない場合)。したがって、実際に実行できる最大値は、77インスタンスのようなものです。

それで、私は実際にいくつ走っていますか?

root@theobromine:~# grep MaxClients /etc/Apache2/Apache2.conf
# MaxClients: maximum number of server processes allowed to start
    MaxClients          150
# MaxClients: maximum number of simultaneous client connections
    MaxClients          150

ああ、Apacheは私が持っているよりも少ないメモリに私を制限していません。したがって、77を超えるクライアントが一度に私のWebサーバーに接続すると、スラッシングが発生する可能性があります。

これは非常に頻繁に見られます。「500の同時Web接続を処理できる必要があります。」しかし、次に、Apacheインスタンスを見て、60MB(珍しく大きなサイズではありません)を使用していますが、VPSを32BGのRAMにアップグレードする必要があると言うと、彼らはびっくりします。 :-)

2