web-dev-qa-db-ja.com

再起動後にLinuxサーバーがクラッシュする原因を見つける方法

これが取引です

1つのサーバーがまったく応答していないことを確認するためだけに動作するようになり、マシンはオンになっていますが、画面には何も表示されず、キーボード入力に応答しません(sys rqキーを有効にしていません) )。

サーバーはpossibloと同じくらい高速で稼働している必要があるため、サーバーをハードリセットすると、すべて正常に動作します。

今、私の上司は何が起こったのか、そしてその理由を知りたいのです。

では、再起動前に問題のあったデバッグを開始するにはどうすればよいですか?どのログに特別な注意を払う必要がありますか?ランダムなサーバーのフリーズをデバッグする方法について、今すぐあなたが気にするかもしれない巧妙なトリックはありますか?

役立つガイドラインと提案をありがとう。

Ps:私はUbuntuサーバー12.04を実行しています。

3
zidarsk8

これはおそらくハードウェアの障害であるため、いくつかのハードウェア診断を調べます。

ハードウェアRAIDコントローラーを使用している場合は、そのログを読み取ることができるかどうかを確認します(3Wareの場合は、tw_cliを使用します)。また、ハードウェアRAIDとソフトウェアRAIDのどちらを使用していても、ディスクのSMARTパラメータを確認できます(ディスクがRAIDコントローラに接続されている場合、ディスクにアクセスするには特別なコマンドが必要になる場合があります。 smartctlマンページ)。

もし、するなら:

smartctl -a /dev/sdX

私は常に主に以下を調べます。

  • 再割り当てセクター数。時間とともに増加する場合は特に悪いです。また、セクターが再割り当てされたディスクは完全には信頼しません。
  • SMARTエラーログを参照してください。最初は読むのが難しいですが、主なことは、イベントがあるかどうかと、いつ(ディスクの経過時間で表される)イベントが発生したかを確認することです。現在のディスク経過時間は、SMARTパラメータの1つとして確認できます。最近の場合、関連している可能性があります。

また、dmesgとsyslogを監視して、時間の経過とともにエラーが発生するかどうかを確認します。たとえば、ディスクエラーは、例外として致命的な問題になるずっと前に表示されることがよくあります。 ata例外について通知する中央ロギングサーバー(rsyslogを使用)があります。それを設定する方法の簡単な例:

/etc/rsyslog.d/60-smtp.conf:

$ModLoad ommail
$ActionMailSMTPServer localhost
$ActionMailFrom [email protected]

/etc/rsyslog.d/70-mail-ata-errors:

$ActionMailTo [email protected]
$template mailSubjectATA,"ATA error on %hostname%"
$template mailBodyATA,"You have ATA errors. Mostly it's the disk and you get these errors before a possible mdraid setup kicks the drive.\r\nBEWARE: ata1.00 is first ata, first disk. Ata1.01 is first ata, second disk. Use the ata-to-device-names.sh script to identify devices.\r\n msg='%msg%'"
$ActionMailSubject mailSubjectATA
$ActionExecOnlyOnceEveryInterval 3600
:msg, regex, "ata.*exception" :ommail:;mailBodyATA

ata-to-devicenamesについてはこちら スクリプトを参照してください。

あなたがすることができるもう一つは、最悪です。 UbuntuのインストールDVD/CDには、ブートメニューにあるものがあります。また、Ubuntuサーバーには、通常のブートメニューにもあると思います。少なくとも1つのパスを作成し、可能であればそれ以上のパスを作成します。

ECCはありますかRAM BTW?ECC RAMは、長期的な安定性とデータの整合性にとって重要です。

5
Halfgaar

/var/log/syslogから始めるのが良いでしょう。再起動後の最初のログメッセージを見つけます。彼らはsyslogの開始とあなたが実行しているカーネルのバージョンについて何かを言うでしょう。

次に、上にスクロールして、システムがクラッシュする前に記録された最後の行を見つけます。さらに上にスクロールして、カーネル自体からログメッセージが見つかるかどうかを確認します。

/var/logの他のログを調べて、クラッシュ前の最後のログ行とクラッシュ後の最初のログ行の間にタイムスタンプがある行を見つけることができるかどうかを確認します。

このすべての努力がクラッシュの時間を絞り込むだけである可能性が高いですが、サーバーがクラッシュした理由については何もわかりません。特に、それがハードウェアの障害である場合、適切なログメッセージを取得することが困難な場合があります。

問題が再び発生した場合に備えて、より多くの情報を取得するのに役立つように構成を変更できる場合があります。の有効化 Sys Rq キーは1つのオプションです。また、画面の非表示をオフにすることも価値があります(使用していない間は、モニターの電源を入れないことで電力の浪費を避けていると思います)。さらに、特に根本的な原因がディスク/ファイルシステムに関連している場合は、ネットワークを介して別のサーバーにログを記録すると役立つことがあります。

3
kasperd

私の一部はLinuxがjust crash ...であってはならないことを言いたいと思います。通常の使用パターンの下での最新のオペレーティングシステムはかなり安定しているはずです。サーバーが不安定になり始めたとき、それはほとんど常にハードウェアまたはドライバーの相互作用です。サーバーの状態と関連コンポーネント(RAM、ストレージなど)をよく見ることをお勧めします。

ハードウェアの健全性に関する洞察を提供しない、または提供できないハードウェア(デスクトップクラスのマシンなど)を使用している場合、Linuxレベルのログに反映されているものの多くを目にする可能性はほとんどありません。

2
ewwhite