MySQLとApacheの調整
先日mysqldの調整をしました。
まぁ調整と言っても、システムのメモリサイズに応じて用意されている設定ファイルのテンプレートを変更しただけなのですが、それでもまだ遅い感じなので、個々のパラメータも若干弄ってみる事にしました。
最初に当方環境を書いておきます。
- MySQL : MySQL 4.0.25
- Apache: Apache 1.3.33
MySQLに関しては、xoopsの関係で4.1にあげずに使っています。またApacheに関しては、ほんとはApache2にしたいのですが、MacOS Xで標準インストールされているApacheと共存させるのにけっこうめんどくさいので、そのまま使っています。
まずmysqldです。
教科書的なことを言えば、調整に際し、以下のログ
を見て、どのテーブルに対する、どのSQLコマンドが遅いのか?を確認してから適切なパラメータを調整する必要がある訳ですが、今回はそこまではせずに、直接webページを表示してみて、表示速度に変化があるかどうかで簡単に確認する事にしました。/usr/local/mysql/data/slow.log
まずmysqldの調整にあたって下記のサイトを参考に致しました。
blogのチューニング
上記サイトでは、my.cnfの下記のパラメータの調整に付いて説明してあります。
このうち、当方のmysqldではquery_cache_min_res_unitのパラメータが存在しないふるいバージョンの様でエラーとなってしまいましたので、これは指定しませんでした。その他を下記のように設定しました。query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=32M
query_cache_type=1
さて、これでmysqldを再起動します。query_cache_limit=4M ←1Mから変更
query_cache_size=64M ←32Mから変更
query_cache_type=1
うん、また少し早くなったようです。いったん描画を始めると早いのですが、一番最初に画面に書き始める所でまだもたつきます。xoopsの画面は、すべてMySQLに格納されたデータを毎回SQL文で検索して読み出してからhtmlを生成するので、MySQLへのSQL文実行に関わる部分を調整してみるのが効果の期待できるところなのですが、それ以外にもアフィリエイト関係でその他のサイトのテキストやバナーイメージを引っ張ってきているので,サイトのサーバの調整だけでは力の及ばない所があるというのが実際の所です。% /usr/local/mysql/support-files/my.server stop
% /usr/local/mysql/support-files/my.server start
その他に何かmysqlに対してできることはないか、と調べていると、mysqldを起動するときのパラメータとして
を指定するのが効果ありそうです。–skip-name-resolveは、mysqlがアクセスしてきたクライアントのIPアドレスからホスト名を引く処理をスキップするオプションで、当方立ち上げているxoopsのサイトでは、mysqldにアクセスしてくるクライアントは、基本的に同じマシン上で動いているwebサーバであるApacheとxoopsを構成しているphpのみです。従っていちいちmysqldへアクセスがあるたびに名前解決をする処理は必要ありません。従って、このオプションを–skip-name-resolve
スクリプトの、起動時のパラメータ指定の所に追記しました。(赤字の所が追記部分)/usr/local/mysql/support-files/mysql.server
さて取り敢えずの所、MySQLでできる調整はこの辺までです。case “$mode” in
’start’)# Start daemon
if test -x $bindir/mysqld_safe then
# Give extra arguments to mysqld with the my.cnf file. This script may
# be overwritten at next upgrade.$bindir/mysqld_safe –datadir=$datadir –pid-file=$pid_file –skip-name-resolve >/dev/null 2>&1 &
# Make lock for RedHat / SuSE
if test -w /var/lock/subsys then
touch /var/lock/subsys/mysql fi else echo “Can’t execute $bindir/mysqld_safe from dir $basedir” fi ;;
さて、もう一つ関係しているのが、webサーバ"Apache"です。
Apacheに関しては、下記の@ITのサイトを参考にしました。
第15回 Apacheパフォーマンス・チューニングのポイント
最終回 Apacheパフォーマンス・チューニングの実践
Apacheの設定ファイルは下記にあります。
上記のサイトの説明を参考に下記を変更しました。これらは主として、Apacheの子プロセスに関する設定です。/etc/httpd/httpd.conf
MaxClients 300 ←150から変更
MinSpareServers 5 ←1から変更
MaxSpareServers 10 ←5から変更
MacRequestsPerChild 1000 ←100000から変更
MaxClientsは同時アクセスできるクライアント数の上限です。すなわち、最大で300の子プロセスhttpdが起動する事になります。そしてこれらが個々にクライアントとセッションを張るので、イコールコネクションの最大数となります。
これは実際に仕事をするプロセスですが、これ以外に子プロセスが起動するのに生ずるオーバーヘッドを抑制するため、余分にプロセスを起動して待機しています。これらの数を指定するのがMinSpareServersとMaxSpareServersです。MinSpareServersは最小待機プロセス数で、MaxSpareServersは最大待機プロセス数です。通常は待機プロセスとしてMinSpareServers分のプロセスが待機していますが、この待機プロセスは稼働状況に応じて最大で10まで増えます。結果として、システムで起動するhttpdの数は
MaxClients + MaxSpareServers = 300 + 10 = 310
となります。これらの値はCPUの負荷とかメモリの利用状況をみながら調整する必要があります。
あと、MaxRequestsPerChildは、起動している子プロセスの生存期間です。あまり同じプロセスが起動しっぱなしになっていると、メモリリークなどが発生したりしてシステムに悪い影響を及ぼす可能性もあります。したがって、或る程度クライアントの処理をこなしたらプロセスに終了してもらい、新たに別の子プロセスを起動するようにするためのものです。当初100000という、かなりのセッションをこなせるようになっていましたが、これを1000回処理したら終わるように変更しています。
変更が終了したらApacheを再起動します。
さて、ここまで変更が終わったらサイトにアクセスしてみます。% apachectl restart
うんうん、劇的といえるほど早くはなってませんが、それでもだいぶ改善されたように思います。まだ若干最初の表示開始までの時間がかかっているのが気になりますが、また改めて調整をして行きたいと思います。■
↓↓↓ 「いいね!」と感じたら、クリックしてBlogRanking投票お願いします(^o^)/




