torutkのブログ

ソフトウェア・エンジニアのブログ

インフラいじり

先週、次のブログでRedmineの応答性能に関する発表スライド(2012-10-20 RxtStudy)を知りました。

スライドは次のURLです。

職場からはslideshareがアクセス禁止になっているので、自宅ワークになります・・・。

スライド、Redmineが1.x系列から2.x系列になる(=Ruby on Railsが2.3系から3.2系になる)と、応答性能劣化が発生するけれど、チューニングすればRedmine 1.x系列と同等以上に速くなります、という内容です。
なお、Redmine 2.0から2.1で性能改善が少しあります(スライドp.15)。

このスライドのチューニング例をみて、すこしいろいろ試したくなって1週間ほど遊んでみました。

MySQLのチューニングについて

いままでMySQLは、Linuxディストリビューション搭載のものを入れて、最低限の設定だけして使用していました。

スライドでは、4GB以上のメモリがあるDB専用マシン向けの設定ファイルであるmy-innodb-heavy-4G.cnfを/etc/my.cnfに使う方法を紹介しています。
CentOS 6の場合、MySQL 5.1が搭載されており、このファイルは/usr/share/mysql/の下に置かれています。

MySQLは、ストレージエンジンとしてMyISAM形式、InnoDB形式他が選択できるようになっています。MySQL 5.1はデフォルトがMyISAM形式なので、ふつうにCREATE TABLEすると、MyISAM形式となってしまいます。つまり、今までRedmineをインストールした環境ではMyISAMになっていました。

昔は「MyISAMは高速」といわれていましたが、検索と更新が混在する環境(つまりRedmineはこれに近いかと)では、InnoDBの方が有利なようです。

ということで、まずストレージエンジンをInnoDBにするところから開始です。

InnoDB plugin

MySQL 5.1は、InnoDBを標準搭載していますが、それとは別にInnoDB pluginなるものがあります。
これは、InnoDBエンジン改善型で、MySQL 5.5のInnoDBの実装となります。CPU、メモリ、I/Oのすべてにおいて改良されたもので、性能向上が計られています。詳しくは次のブログで。

MySQL 5.1では、5.1.38からRC版InnoDB pluginがバンドルされ、5.1.46でGA版となっています。

CentOS 6(Red Hat Enterprise Linux 6)では、6.3以降のバージョンでこのInnoDB pluginが含まれるようになります。

なお、MySQL 5.5のInnoDBはバージョンが1.1とInnoDB pluginの1.0.6よりさらに性能改善が進んでいるとのことです。

MySQL 5.1か5.1+InnoDB pluginか5.5か

ということで、パラメータチューニングをする前に、どのバージョンのMySQLを使うかを考えた方がよいかと思い始めました。

Cent OS 6の場合、remiリポジトリyumに追加すると簡単にMySQL 5.5がインストールできるようです。が、依存するyumを増やすのも気が進まないので、5.1+InnoDB Pluginの道を進んでみようと思います。

報告はいずれ後日・・・

MySQLパフォーマンス関係書籍

以前買っていた本ですが、今回ほぼはじめて開きました。

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版

また、今回以下の本を買ってしまいました。

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

Railsサーバー(Unicorn)のチューニングについて

Redmine 2.xになって応答性が劣化した要因は、Rails 3でコードサイズが大きくなったため、GCガベージコレクション)の負荷があがったためとのことです。

そこで、冒頭のRedmine性能のスライドでは、Unicornの設定でRubyGCを停止させ、5リクエストに1回GCを実行するという技を繰り出しています。

これを試してみようと思います。報告はいずれ後日・・・。

Rubyのバージョンについて

また、GCについては、Ruby 1.8.7と1.9では相当の改善があるので、CentOS 6でRedmineを動かすときは標準搭載の1.8.7ではなく、別途1.9.3を入れるのがよいでしょう。

Redmine.jpのインストール手順でも、CentOS 6にRedmine 2.1.2を載せる際はRuby 1.9.3を入れるようにしていました。

munin監視ツール

インフラいじりにあたっては、サーバーのリソース(CPUやメモリ、ディスクI/Oなど)をしばしば参照します。Linuxはコマンドで詳細に情報を取ることができますが、手間といえば手間です。

そんなときに、お手軽かつ有効な監視ツール munin を知りました。

監視ツールを自動起動にしておいて、Webブラウザでアクセスすれば各項目がグラフで可視化されて見れるというお手軽さです。すばらしい。

CentOS用にはEPELリポジトリに上がっているので簡単にインストールできます。

CentOS 6へのインストールと設定ファイル修正手順を記載しているWebページがありました。

Nginxいじり

リバースプロキシの運用実験も兼ねて、Nginxいじりをしています。書籍を買ってしまいました。

ハイパフォーマンスHTTPサーバ Nginx入門

ハイパフォーマンスHTTPサーバ Nginx入門