Cannot allocate memory for the buffer pool でMySQLが落ちる

こんにちは、daihaseです。
先日、実は当ブログが一時的に接続出来ない状態となっていました。

直ぐに復旧はしましたが、原因はタイトルにもある「バッファプールへのメモリ割り当てが足りていない」というものでした。

当初このブログもAWSのt1.microで動かしており、その際swap領域も割り当てたのですが以前より今はアクセスも多くなってそれだと厳しかったようです。

実際MySQLのログを見てみると以下のようにエラーが出ていました。

  • /var/log/mysqld.log

というわけで今回はswap領域の拡張と、エラーにもある足りてないinnodb_buffer_pool_sizeを再設定します。

swap領域の拡張

swapファイルの作成

以下コマンドでswapファイルを作成します。

※今回当ブログを動かしているインスタンスタイプがt1.smallで物理メモリ2GBなため、4GBに設定しました。

実際作成されたか確認してみます。

この作成したファイルをrootでしか権限変更出来ないようにします。

次にこれをswap領域として設定します。

最後にこのswap領域を有効化します。

ではfreeコマンドを使って実際に作成されたか見てみましょう。

-mオプションで単位をMBにして見やすくしてます。ちゃんとSwap領域が4095MB作られていますね。

ちなみに余談ですが、作ったswapファイルは割り当てを解除したり削除もできるので、再利用したり不要になったら削除しましょう。

  • swapファイル割り当て解除

  • swapファイルの削除

これでSwapの拡張は終わりで、次はMySQL側のInnoDBを設定します。

InnoDBの設定

innodb_buffer_pool_sizeの変更

MySQLの初期設定では128MBとなっています。

my.confに以下のように追記してサイズを変更しまし。(デフォルトでは/etc/my.confに)

設定を反映するためにMySQLを再起動します。

あとは実際にMySQLでログインし、以下のコマンドを打って確認します。

無事サイズが増えていますね。

基本的にはSwapが発生してるのであればインスタンスを上位に変更する方がいいのですが、如何せんそこまでアクセスの多いブログでもないため、ある程度これで様子を見てみます。

厳しそうであればもう一つ上位インスタンスへの変更もやむなし…ですかね。

なにはともあれ、良い開発ライフを〜

スポンサーリンク
336 x 280 レクタングル(大)
336 x 280 レクタングル(大)