MySQL(MariaDB)が頻繁にクラッシュする


9

最近、MySQLを実行している古いサーバーをMariaDB 5.5を実行している新しいVPSに移行しました。サーバーで実行している量は多くなく(わずかなPHPサイトのみ)、空きメモリは問題ないようですが、DBがクラッシュし続けることがあります-場合によっては数日ごと、場合によっては数時間以内。

ログに次のエラーが表示されます。

131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 54362112 bytes)
131231  1:43:04 InnoDB: The InnoDB memory heap is disabled
131231  1:43:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131231  1:43:04 InnoDB: Compressed tables use zlib 1.2.3.4
131231  1:43:04 InnoDB: Using Linux native AIO
131231  1:43:04 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
131231  1:43:04 InnoDB: Completed initialization of buffer pool
131231  1:43:04 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131231  1:43:04 [ERROR] Plugin 'InnoDB' init function returned error.
131231  1:43:04 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131231  1:43:04 [Note] Plugin 'FEEDBACK' is disabled.
131231  1:43:04 [ERROR] Unknown/unsupported storage engine: InnoDB
131231  1:43:04 [ERROR] Aborting

131231  1:43:04 [Note] /usr/sbin/mysqld: Shutdown complete

InnoDBヒープのmy.cnf設定を試してみましたが、役に立たないようです。関連する部分は次のとおりです。

innodb_buffer_pool_size = 128M
innodb_log_buffer_size  = 8M
innodb_file_per_table   = 1
innodb_open_files       = 400
innodb_io_capacity      = 400
innodb_flush_method     = O_DIRECT

「十分な」空きRAMがあるようで、スワップも利用できます。

root@phoenix:~# free -m
             total       used       free     shared    buffers     cached
Mem:           994        923         71          0         19        417
-/+ buffers/cache:        486        508
Swap:         1023        131        892

この問題を解決/トラブルシューティングするにはどうすればよいですか?私はinterwebzを手掛かりに探しましたが、何も助けになりませんでした。


1
クラッシュする直前のメモリはどのように見えますか?[ERROR] mysqld: Out of memory強力なヒントのようなことを確認ルックス。システムログをチェックして、カーネル(OOM)がmysqlを強制終了することを決定したかどうかを確認しましたか?
Zoredache 2014年

topクラッシュの原因を特定するために、クラッシュの前後に使用されたファイルハンドルと使用されたメモリをログに記録する必要があります(おそらく、間隔ごとにコマンドのダンプも)。mysql(mariadb)のような他のサービスがサーバーで実行されていますか?
Ashwin kumar 2014年

1
有用であると思わDBAにオーバー本当に素晴らしい答えがあります:dba.stackexchange.com/questions/1927/...は
マット・ハマン

performance_schema = offを試しますか?

回答:


9

お役に立てれば幸いです。

試す

performance_schema = off

[mysqld]ご使用の構成のセクション。

https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/


これを試してみてください。数日間サービスを提供し、継続して稼働し続けるためにすぐに報告します。
Matt Hamann、2015

かなり役に立ったようです。100%解決したかどうかはわかりませんが、これを調整してからはかなりうまくいきます。ありがとう。
Matt Hamann
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.