こんにちは、daihaseです。 先日、実は当ブログが一時的に接続出来ない状態となっていました。
直ぐに復旧はしましたが、原因はタイトルにもある「バッファプールへのメモリ割り当てが足りていない」というものでした。
当初このブログもAWSのt1.microで動かしており、その際swap領域も割り当てたのですが以前より今はアクセスも多くなってそれだと厳しかったようです。
実際MySQLのログを見てみると以下のようにエラーが出ていました。
- /var/log/mysqld.log
170310 21:54:57 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 170310 21:54:57 InnoDB: Completed initialization of buffer pool 170310 21:54:57 InnoDB: Fatal error: cannot allocate memory for the buffer pool 170310 21:54:57 [ERROR] Plugin 'InnoDB' init function returned error. 170310 21:54:57 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 170310 21:54:57 [ERROR] Unknown/unsupported storage engine: InnoDB 170310 21:54:57 [ERROR] Aborting
というわけで今回はswap領域の拡張と、エラーにもある足りてないinnodb_buffer_pool_sizeを再設定します。
swap領域の拡張
swapファイルの作成
以下コマンドでswapファイルを作成します。
$ sudo mkdir /var/lib/swap $ cd /var/lib/swap $ fallocate -l 4G swapfile
※今回当ブログを動かしているインスタンスタイプがt1.smallで物理メモリ2GBなため、4GBに設定しました。
実際作成されたか確認してみます。
$ ls -lh swapfile -rw-r--r-- 1 root root 1.0G May 20 14:33 swapfile
この作成したファイルをrootでしか権限変更出来ないようにします。
$ sudo chmod 600 swapfile $ ls -lh swapfile -rw------- 1 root root 1.0G May 20 14:33 swapfile
次にこれをswap領域として設定します。
% sudo mkswap swapfile
最後にこのswap領域を有効化します。
% sudo swapon swapfile
ではfreeコマンドを使って実際に作成されたか見てみましょう。
$ free -m total used free shared buffers cached Mem: 2003 1503 499 0 28 107 -/+ buffers/cache: 1367 635 Swap: 4095 0 4095
-mオプションで単位をMBにして見やすくしてます。ちゃんとSwap領域が4095MB作られていますね。
ちなみに余談ですが、作ったswapファイルは割り当てを解除したり削除もできるので、再利用したり不要になったら削除しましょう。
- swapファイル割り当て解除
$ sudo swapoff swapfile
- swapファイルの削除
$ sudo rm swapfile
これでSwapの拡張は終わりで、次はMySQL側のInnoDBを設定します。
InnoDBの設定
innodb_buffer_pool_sizeの変更
MySQLの初期設定では128MBとなっています。
my.confに以下のように追記してサイズを変更しまし。(デフォルトでは/etc/my.confに)
[mysqld] ... innodb_buffer_pool_size=1000M
設定を反映するためにMySQLを再起動します。
$ /etc/init.d/mysqld restart
あとは実際にMySQLでログインし、以下のコマンドを打って確認します。
mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 1048576000 | +-------------------------+------------+ 1 row in set (0.00 sec)
無事サイズが増えていますね。
基本的にはSwapが発生してるのであればインスタンスを上位に変更する方がいいのですが、如何せんそこまでアクセスの多いブログでもないため、ある程度これで様子を見てみます。
厳しそうであればもう一つ上位インスタンスへの変更もやむなし...ですかね。
なにはともあれ、良い開発ライフを〜