2021-05-14に更新

ある日突然ロードアベレージが200を超えた

※サーバの知識が乏しい為、誤った情報を載せるわけにもいかないので
具体的な解決方までは記載してません。ポエム感覚です。

何が起きた

ある日、自分が開発した社内チャットツールが504エラーで開けなくなりました。
クッソ時間をかけてターミナルを開き、topで確認したところload average:86 となっていて爆笑しました。(笑っている場合ではない)
その後、色々対処している最終に230くらいになりました。写真撮っておけば良かったな(白目)。

どうしてそうなった

他のツールから、かなりの数のメッセージが送られてきたのが原因でした。
と言っても1分に100件~200件程度なので、めちゃくちゃ多いのか?と言われれば微妙なところです。

とりあえず復活させるぞ

実は以前にも同じことが起きたのですが、そのときはまだサーバの知識が今より乏しく、
とりあえず早く復旧させなきゃという気持ちが先走ってrebootしてしまいました。
もちろんこれで直ることもありますが、下手するとrebootしてから1時間くらい立ち上がらないなんてこともあるので(経験者は語る)、
むやみにやらないべきだと思います。

何が原因か突き止める

めちゃくちゃ重いときはターミナルを開くのも一苦労であることが多いですが、めげずに待ちましょう。
で、私はとりあえずtopでロードアベレージやメモリ、CPUを確認します。
入っているなら、htopの方が見やすいかも。

その後はひらすらググります!!!
「ロードアベレージ 高い」「メモリ 解放されない」とか。
もっと根本的に「504エラー 原因 突き止める」とか。

あと、アプリ自体のlogも確認します。
今回の場合は、ログファイルが朝の時点で昨日より3倍のサイズだったり、
メッセージ送信のAPIがめちゃくちゃ呼ばれていた形跡があったので、予測通りこれ原因だな…と確信しました。

原因の元をどうにかする

とりあえずApacheの再起動を試みましたが、タイムアウトでエラーになり出来ませんでした。
これはkillするしかないな…と思い、以下のように対処。

# Apacheのプロセスを確認
ps agx | grep httpd

# とりあえず一番上に出てきたプロセスをkill
sudo kill 34568 (※PID)

# ロードアベレージが落ち着いてきたらApache再起動
sudo systemctl restart httpd

この処理が終わるまでも時間かかりますが、
killされてからは徐々にロードアベレージも減っていきました。
Apacheを再起動し、なんとか復旧しました。

おわり

根本的に、
「100件程度のメッセージで落ちないような設計にしろよ!」とか
「そもそも1分に100件送ってくんなよ!!」とか
その辺りの問題はまだありますが、それはまた別の話として。

以前よりはサーバダウンにも冷静に対処出来たんじゃないかなと思います。
今回は原因がわかっていたので良かったですが、また別の要因で再発したときにも慌てず対処したいなと思う所存でございます。

ツイッターでシェア
みんなに共有、忘れないようにメモ

みみみみみ

2歳と2ヶ月くらいの赤ちゃんです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント