FLAMA技術Blog

Home  /  Amazon/AWS • CentOS  /  EC2のmicroインスタンスでMySQLが落ちる場合

EC2のmicroインスタンスでMySQLが落ちる場合

Boss 5月 02, 2012 Amazon/AWS, CentOS 1 Comment
Share on Tumblr
Pocket
このエントリーをはてなブックマークに追加
LinkedIn にシェア

EC2でMySQLを走らせていて、何度かMySQLが落ちるという事態が発生しました。
だいたいの場合はテスト用・開発用なのでMySQL再起動で問題は無いわけですが、
場合によっては(主にお金の問題で…)microインスタンスを商用に使う場合もあります。

ということで原因を探りにログをあさってみたところ、どうやら、MySQL自体は生きているものの、InnoDBストレージエンジンがメモリ不足で落ちている模様です。
確かに、インストールしたままで動かしていたこともあり、また、microインスタンスの総メモリは613MBなので足りなくなってもおかしくはありません。

そんな時、「確かMySQLの想定メモリ使用量を計算する方法があったなあ」と思い出したので、そもそも計算上どうなのよ、というのを再確認しようと思い立った次第です。

公式リファレンスには

innodb_buffer_pool_size + key_buffer_size + max_connections * (sort_buffer_size + read_buffer_size + binlog_cache_size) + max_connections * 2MB

となっています。
http://dev.mysql.com/doc/refman/5.1/ja/innodb-configuration.html
この計算式でざっくりデフォルト値を計算すると、だいたい400MBくらいになります。

また、O’Reilly本の計算式に基づくと
http://rental.off-soft.net/323.html
ということで1GBくらい、という計算になっているようです。
#そういえばこの本、手元にもあった(笑)。

そもそもmicroインスタンスにApacheなどWebサーバとして最小限のパッケージを入れて動かしている状態で、MySQLが動いていなくても既に300MBくらいは使用しています。たとえv5系リファレンスの計算通りだとしても足りないわけです。

じゃあmicroインスタンスでMySQLは使えないのか、というともちろんそんなことはなく、単純に max_connections の値を減らせば、メモリの使用量は減ります。どの計算式を使ったとしても、結局のところ全体の数値が押し上がっているのは、「* max_connections」の部分で100倍されているからです。
ということで、 /etc/my.cnf などに

max_connections=10

と追加することになります。

もちろん、レスポンスには影響が出ます。
これ以上のレスポンスを求めるのであればもっと大きいインスタンス使ってね、ということなわけですね。
#そこんとこどうにかなりませんか、と問われてもさすがにどうにも…。

Previous Article
Next Article

About Author

Boss

株式会社FLAMA

Related Posts

  • VPC内EC2でELBがOutOfServiceのまま

    VPC内EC2でELBがOutOfServiceのまま

    2016 年 1 月 22 日
  • AWS ELBの謎挙動

    AWS ELBの謎挙動

    2014 年 12 月 29 日
  • peclインストール+phpunitインストール+php-skelgenインストール

    peclインストール+phpunitインストール+php-skelgenインストール

    2014 年 7 月 24 日

1 Comment

  1. ピンバック: Amazon EC2(AWS) t1.microでWordPress運用 - サイト制作の豆知識

About

主に 株式会社FLAMA の技術担当取締役を中心に技術者が書いております。

プログラミング・サーバー/クラウド技術などについての小ネタから、システム化にまつわるあれこれや、プログラマー教育、そこから発生する様々な考え方などまでご紹介。

株式会社FLAMA
http://www.flama.co.jp/

お問い合わせ
http://www.flama.co.jp/contact/

プライバシーポリシー
http://www.flama.co.jp/privacy/

AD

最近の投稿

  • Golangでのメソッドチェーンの書き方
  • Goのソース配置とパッケージ化についての試行と考察 @2018/1
  • Goのファイル配置&セットアップ例 2018/1版
  • Laravelで最初につまづきがちかもしれない9つのポイント
  • Go のフレームワーク echo でCSRFミドルウェアを使う(3)CSRFトークンの送出にFormを指定する
  • Go のフレームワーク echo でCSRFミドルウェアを使う(2)結果を取り出す
  • Go のフレームワーク echo でCSRFミドルウェアを使う(1)CSRFトークンを取り出す
  • JSONの仕様を復習する@2017
  • PDOでトランザクションを開始する場合の順序
  • [Golang] [凡ミス] json.Marshal() の返り値が空になる

カテゴリー

  • その他
  • よのなか
  • 告知
  • 情報技術
    • 都市伝説
  • 技術
    • Golang
    • Google
    • Google Apps
    • iPhone
    • OS
      • Arch Linux
      • CentOS
      • MacOSX
    • PHP
    • Web
      • HTML5/CSS3
      • Javascript/JSON
      • jQuery
    • WordPress
    • サーバ
      • Amazon/AWS
      • Docker
      • ImageMagick
      • MariaDB / MySQL
      • Revive (OpenX
    • 実験・検証
    • 携帯
  • 機械
Theme by ThemesPie | Proudly Powered by WordPress