買ったものkisse-logs!楽しいエンジニア生活を送りたい大学生kisseの雑記ブログ。2018-11-29こんにちは、kisseです!先日、GCEでMySQLが死んでたのでとりあえず起動しようとしたら起動しない問題に直面しました。時間かけて調査したら、スワップ領域が存在しないことが原因だったようなので、スワップ領域の作成について簡単にまとめました。コマンドだけもうコマンドの意味とかどうでもいいからって方向け実行コマンド。(現在の状態とかわからないのでちょっと危険ではあるけど。/swapfileスワップ領域ってそもそもなんだ僕の場合、この認識が甘かったのでのちに記載する問題に直面しました。(というか存在は知っていたがパソコンのOSなどでは意識する必要がなかったので思いつかなかった。)スワップ領域とは、メモリ上に乗り切らなかったデータを一時的に退避させる2次記憶上の領域です。これがあることによって、限られたメモリでも大きな作業ができるようになります。逆にこれが設定されてないと、メモリが足りなくなった際にデータを移す先が見つからずに、プロセスが進むことができなくなってしまいます。このスワップ領域は、普段使うようなパソコンではOSが勝手に作って管理してくれてます。GCEではスワップ領域が存在しないGCEでは初期状態ではスワップ領域が存在しないらしいです。すると、メモリを使い切ってしまった時にプロセスが落ちてしまいます。僕の場合、GCEの一番小さなインスタンスで、MySQLを動かしていた際に発生しました。MySQLの起動コマンドを打ち込んでも、メモリが足りずに起動しないというおまけ付きでした。GCE上にスワップ領域を作成しようfreeコマンドで、システムのメモリ領域とスワップ領域の大きさと空き容量を確認することができます。実際に試してみると、スワップ領域が0となっていることを確認できます。ここからSwap領域の作成をします。以下のコマンドを打ち込みます。いった利用ができるコマンドです。いう意味のコマンドです。/dev/zeroとは、すべてヌル文字のファイルという意味を持つ特殊なファイルです。of=/swapfileとは、ifで指定されたファイルを/swapfileに書き込みます。いうオプションは/swapfileという全てヌル文字でフォーマットされたファイルを作成するという意味となります。bs=1Mとは一度に読み書きするブロックサイズを1MBとするよという指定です。count=1024とは、書き込みの個数を指定してます。上の2個のオプションで、1024MB分の書き込みを行うよという意味になります。いう1024MBのファイルを全てヌル文字にして作ってねという意味になります。/swapfileでファイル所有者がこのファイルを読み書きできるようにしておきましょう。/swapfileというコマンドでは/swapfileというファイルをスワップ領域として使用できるようにしておきます。/swapfileでスワップ領域を有効化してあげます。GCEのインスタンスサイズを変更したら、スワップ領域が消えた!どうやらこれはそういうものみたいです。起動時にスワップ領域を有効化するという設定を別途してあげると楽そうです。どれくらいのスワップ領域を設定してあげると良いんだろう現在、僕はf1-microでモバイルアプリのサーバーサイドを運用してます。f1-microだとRAMは0.6GB割り当てられます。そこで、主にメモリを消費するのが、インスタンス内で起動させているMySQLのみです。freeコマンドを実行してスワップ領域の使用量をチェックしてみたら、まだ300MB程度しか使ってないみたいです。f1-microで済むようなサービスの場合、スワップ領域は1GB程度用意しておけばとりあえず大丈夫なのではといった様子です。それ以上になると、そもそもRAMが全く足りてないだとか、ディスク領域使いすぎだよねってことになりそうですね。おわり最後まで読んでいただきありがとうございます!今後も実際にサーバーを運用する中で得た知見を少しずつ残していこうかと思います。