ページへ戻る
印刷
Gentoo Linuxな生活/Webサーバ高速化で悩む
をテンプレートにして作成 ::
Nest Of Hawk
xpwiki
:Gentoo Linuxな生活/Webサーバ高速化で悩む をテンプレートにして作成
開始行:
*ふとしたキッカケ
Apache httpサーバが2.2系から2.4系にアップデートされた事が...
Multi Processing Moduleという名称からも分かるように、mpm...
ほほう、なるほど…並列処理用のモジュールの指定、ということ...
*設計指針
-入力が捌けなくて落ちない様に、奥(PHPやMySQL)は広く、入り...
-プロセス/スレッド/キャッシュ数は、なるべく理にかなった方...
*Apache MPMの設定
**MPMの種類
ApacheのMPMにはいくつか種類があり、必ず実行プロセスについ...
:prefork|HTTPリクエストに1つのプロセスを割り当てる。つま...
:worker|HTTPリクエストに1つのスレッドを割り当てる。起動し...
:itk|preforkと一緒だが、スクリプトを実行するユーザ権限を...
:perchild|workerと同じ考え方だが、バーチャルホスト毎にプ...
:event|workerと同じく、プロセス/スレッドの組み合わせだが...
一般的に使用されるのはprefork/worker。eventは2.2系ではExp...
**MPMを選択してコンパイルする
/etc/portage/make.confに、以下の記載を追加します。ちなみ...
APACHE2_MPMS=event
# emerge apache2
**MPMのチューニング
/etc/apache2/modules.d/00_mpm.confにMPMの動作パラメータが...
:StartServers|最初に起動する子プロセスの数
:MinSpareThreads|最小の待機スレッド数
:MaxSpareThreads|最大の待機スレッド数
:ThreadsPerChild|子プロセスの中のスレッド数
:MaxRequestWorkers|最大同時接続ワーカー数
:MaxConnectionsPerChild |子プロセスの最大数
だ、そうです。さて、うちではどうして言うかというと-。
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 10000
起動時、StartServers、MinSpareThreadsで待機していますが、...
ポイントは、MaxRequestWorkersで、同時接続の最大数。同時ア...
*PHPの並列動作について
PHPをマルチスレッドで動作させるのは非推奨だと、[[PHPホー...
**FastCGIをやってみる
さて、FastCGIの設定は、[[このページ:http://femt.ddo.jp/mo...
**チューニング
pm = dynamic #下記パラメータに従って...
pm.max_children = 100 #最大同時接続数
pm.start_servers = 4 #最初に起動しておくプロセ...
pm.min_spare_servers = 1 #待機させておくサーバの最小数
pm.max_spare_servers = 4 #待機させておくサーバの最大数
さて。pm.max.childrenまで子プロセスを増やします。このプロ...
さらに、start_servers数だけ、最初に起動しておきます。全部...
というわけで、忙しいときには増え、使い終わるとプロセスを...
**PHPのキャッシュ(opcacheとPECL-APCu)を設定する
***opcache
PHP5.5移行、PHPに組み込まれています。opcacheはコードキャ...
/etc/php/XXX-phpX.X/php.iniの以下の項を設定します。
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
**PECL-APCu
PECL-APCuは、データキャッシュで、データの読み込みを高速化...
***コンパイル
# emerge dev-php/pecl-apcu
さて、インストールされたAPCuを設定いたします。/etc/php/XX...
apc.shm_size=128M
apc.ttl=86400
apc.gc_ttl=86400
これで、php-fpmを再起動してあげます。どうですかね?かなり...
*MySQLのチューニング
さて、DBのチューニングってのも、課題になりますよね。そこ...
**mysqltuner
# emerge mysqltuner
さて、mysqltunerをインストールしましたら、実行してみます...
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better pe...
Reduce or eliminate persistent connections to reduce ...
Upgrade MySQL to version 4+ to utilize query caching
Adjust your join queries to always utilize indexes
Set thread_cache_size to 4 as a starting value
Increase table_cache gradually to avoid file descript...
Variables to adjust:
max_connections (> 151)
wait_timeout (< 28800)
interactive_timeout (< 28800)
join_buffer_size (> 64.0M, or always use indexes with...
thread_cache_size (start at 4)
table_cache (> )
さて、このmysqltuner、サーバの運用実績から、改善事項を提...
***OPTIMIZE TABLE
テーブルがフラグメントされてるから、最適化しろ、だそうで...
# mysqlcheck -u <管理者ユーザ> -p<パスワード> --all-data...
ちなみに、InnoDBの場合は、最適化ができないので、ALTER TAB...
***my.cnfの調整
指示に従って、/etc/mysql/my.cnfを変更してあげます。何回か...
join_buffer_size =1M
table_open_cache = 8192
max_connections = 150
wait_timeout = 20000
interactive_timeout = 20000
thread_cache_size = 4
query_cache_type = 1
query_cache_limit = 16M
query_cache_size = 512M
skip-name-resolve = 1
innodb_buffer_pool_instances = 7
調整が済んだら、mysqlを再起動しましょう。
# /etc/init.d/mysql restart
join_buffer_sizeを大きくしろ、と散々言われます。が、そも...
*結果
正直、爆速になりました。以前は、正直Wehページが描画される...
終了行:
*ふとしたキッカケ
Apache httpサーバが2.2系から2.4系にアップデートされた事が...
Multi Processing Moduleという名称からも分かるように、mpm...
ほほう、なるほど…並列処理用のモジュールの指定、ということ...
*設計指針
-入力が捌けなくて落ちない様に、奥(PHPやMySQL)は広く、入り...
-プロセス/スレッド/キャッシュ数は、なるべく理にかなった方...
*Apache MPMの設定
**MPMの種類
ApacheのMPMにはいくつか種類があり、必ず実行プロセスについ...
:prefork|HTTPリクエストに1つのプロセスを割り当てる。つま...
:worker|HTTPリクエストに1つのスレッドを割り当てる。起動し...
:itk|preforkと一緒だが、スクリプトを実行するユーザ権限を...
:perchild|workerと同じ考え方だが、バーチャルホスト毎にプ...
:event|workerと同じく、プロセス/スレッドの組み合わせだが...
一般的に使用されるのはprefork/worker。eventは2.2系ではExp...
**MPMを選択してコンパイルする
/etc/portage/make.confに、以下の記載を追加します。ちなみ...
APACHE2_MPMS=event
# emerge apache2
**MPMのチューニング
/etc/apache2/modules.d/00_mpm.confにMPMの動作パラメータが...
:StartServers|最初に起動する子プロセスの数
:MinSpareThreads|最小の待機スレッド数
:MaxSpareThreads|最大の待機スレッド数
:ThreadsPerChild|子プロセスの中のスレッド数
:MaxRequestWorkers|最大同時接続ワーカー数
:MaxConnectionsPerChild |子プロセスの最大数
だ、そうです。さて、うちではどうして言うかというと-。
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 10000
起動時、StartServers、MinSpareThreadsで待機していますが、...
ポイントは、MaxRequestWorkersで、同時接続の最大数。同時ア...
*PHPの並列動作について
PHPをマルチスレッドで動作させるのは非推奨だと、[[PHPホー...
**FastCGIをやってみる
さて、FastCGIの設定は、[[このページ:http://femt.ddo.jp/mo...
**チューニング
pm = dynamic #下記パラメータに従って...
pm.max_children = 100 #最大同時接続数
pm.start_servers = 4 #最初に起動しておくプロセ...
pm.min_spare_servers = 1 #待機させておくサーバの最小数
pm.max_spare_servers = 4 #待機させておくサーバの最大数
さて。pm.max.childrenまで子プロセスを増やします。このプロ...
さらに、start_servers数だけ、最初に起動しておきます。全部...
というわけで、忙しいときには増え、使い終わるとプロセスを...
**PHPのキャッシュ(opcacheとPECL-APCu)を設定する
***opcache
PHP5.5移行、PHPに組み込まれています。opcacheはコードキャ...
/etc/php/XXX-phpX.X/php.iniの以下の項を設定します。
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
**PECL-APCu
PECL-APCuは、データキャッシュで、データの読み込みを高速化...
***コンパイル
# emerge dev-php/pecl-apcu
さて、インストールされたAPCuを設定いたします。/etc/php/XX...
apc.shm_size=128M
apc.ttl=86400
apc.gc_ttl=86400
これで、php-fpmを再起動してあげます。どうですかね?かなり...
*MySQLのチューニング
さて、DBのチューニングってのも、課題になりますよね。そこ...
**mysqltuner
# emerge mysqltuner
さて、mysqltunerをインストールしましたら、実行してみます...
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better pe...
Reduce or eliminate persistent connections to reduce ...
Upgrade MySQL to version 4+ to utilize query caching
Adjust your join queries to always utilize indexes
Set thread_cache_size to 4 as a starting value
Increase table_cache gradually to avoid file descript...
Variables to adjust:
max_connections (> 151)
wait_timeout (< 28800)
interactive_timeout (< 28800)
join_buffer_size (> 64.0M, or always use indexes with...
thread_cache_size (start at 4)
table_cache (> )
さて、このmysqltuner、サーバの運用実績から、改善事項を提...
***OPTIMIZE TABLE
テーブルがフラグメントされてるから、最適化しろ、だそうで...
# mysqlcheck -u <管理者ユーザ> -p<パスワード> --all-data...
ちなみに、InnoDBの場合は、最適化ができないので、ALTER TAB...
***my.cnfの調整
指示に従って、/etc/mysql/my.cnfを変更してあげます。何回か...
join_buffer_size =1M
table_open_cache = 8192
max_connections = 150
wait_timeout = 20000
interactive_timeout = 20000
thread_cache_size = 4
query_cache_type = 1
query_cache_limit = 16M
query_cache_size = 512M
skip-name-resolve = 1
innodb_buffer_pool_instances = 7
調整が済んだら、mysqlを再起動しましょう。
# /etc/init.d/mysql restart
join_buffer_sizeを大きくしろ、と散々言われます。が、そも...
*結果
正直、爆速になりました。以前は、正直Wehページが描画される...
ページ名: