サイトが閲覧できなくなった件に対処
この記事でやること
サーバーのメモリ不足に対してスワップ (swap)領域を増やします。
※swapとは、メモリ容量が逼迫してきた際にメモリ領域の内容をスワップ領域に退避することです。
この記事を書くに至った経緯
先日「【WordPress移行】GCPでWordPress環境を構築する」という記事を書きまして、時折「データベース接続確立エラー」という文言が画面上に表示されて原因がよくわからないでいました。
調べてみても「データベースが破損している」だとか
「プログラムに定義されているMySQLのパスワードが間違っている」といった内容ばかり出てきましたが私の場合は問題ありませんでした。
異なる環境で同様のインスタンスを構築した際は「データベース接続確立エラー」にはならなかったのですが、時折apacheが停止する現象が発生していました。
「Google Stackdriver」を見ても原因を特定できるようなログは見当たらず。ただ、閲覧できなくなった時間の前にCPUの負荷が高くなっていることに気づき、アクセスが集中した際やサーバー側で何らかの負荷がかかった際に、CPUの負荷と併発してメモリ不足も起こっているんじゃないかと思いました。
apacheには標準で「Apache Bench」というサーバーに負荷をかけるツールがあることを知り、試してみると「データベース接続確立エラー」を再現することができました。
そこで、「GCE メモリ不足」とかで調べてみると「swap領域を増やしましょ」といった内容の記事がいくつか見つかりました。
AWSのナレッジにも「スワップファイルを使用して、Amazon EC2 インスタンスのスワップ領域として動作するようにメモリを割り当てる」という記事がありました。
私はDebianを使用しているのですが、swap領域はデフォルトでは確保されていませんでした。
AWSやGCPではメモリも容易に増減できるのでコスト的な問題なければswap領域作るのではなくメモリを増強したほうがよさそうです。(swap領域の作成にはメリットデメリットがあるので)
本件の原因として「OOM Killer」を疑いましたがログには何も出ておらずハッキリした原因は特定できず。
※OOM Killerとは、必要なメモリー領域を新たに確保できない際にプロセスを強制終了させて空きメモリーを確保すること。
ただ、swap領域を確保して以降は再発していません。
スワップ (swap)領域の確保
事前に「top」コマンドで実行中のプロセスを表示します。
1 |
top |
少し負荷をかけるとapacheとmysqlが上位に上がってきます^^;
「free」コマンドでメモリの使用状況を確認します。
swapが0Bになっていることが確認できます。
1 |
free -hmt |
「/home/swap」ディレクトリを作成します。
1 |
sudo mkdir /home/swap |
1GBのswapファイル(swap_1GB)を作成します。
※コマンド実行後、作成に少し時間を要します
1 |
sudo dd if=/dev/zero of=/home/swap/swap_1GB bs=1024 count=1024000 |
swap領域にするファイルを指定します。
1 |
sudo mkswap /home/swap/swap_1GB |
swapをONの状態にします。
1 |
sudo swapon /home/swap/swap_1GB |
「free」コマンドで拡張したswap領域が機能していることを確認します。
swapが999Mになっていることが確認できます。
1 |
free -hmt |
swap領域の情報は「swapon」コマンドで表示させる事ができます。
1 |
sudo swapon -s |
システム起動時にswapがONになるようシェルスクリプトを作成します。
※例では「nano」コマンドを使用
1 |
sudo nano /usr/local/bin/swap.sh |
ファイルの内容は以下の通り
1 |
#!/bin/sh<br />swapon /home/swap/swap_1GB |
ファイルに実行権を付与し、シンボリックリンクを作成します。
1 |
sudo chmod 755 /usr/local/bin/swap.sh<br />sudo ln -s /usr/local/bin/swap.sh /etc/rc2.d/S12swap |
以上で設定完了です。
最後までお読みいただきありがとうございました…_〆(゚▽゚*)
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント