激遅サーバの設定を見直したら劇的に改善した

※さらに手を加えてパフォーマンスが上がった記事はコチラ

驚愕の事実が発覚した。

ApacheBenchを使ってみたら、一秒間に処理できるリクエストが0.56って何だこりゃ。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 0.56?[#/sec] (mean)
~ばっさり略~

素人だと甘えてろくな設定もやっていなかったけど、いくらなんでもこれは酷い。 気分が一気に凹んだけど、そうも言っていられないので、頑張ってちゃんとした設定を投入しよう。

このサーバはminecraftのサーバも走らせているので、それを止めてもこの有様。

Requests per second: 0.82?[#/sec] (mean)

まず、このままの設定でもどの程度の実力があるのかを調べるために、画像を1枚だけ置いたページで負荷を高めて測定してみる。

$ ab -n 10000 -c 100 //xxx.nakayan.jp/
~ばっさり略~
Requests per second: ? ?1275.91?[#/sec] (mean)
~ばっさり略~

試しに同時接続数を増やして、リクエスト数を減らしてみると、こんな感じ。 両方上げると途中で止まる。

$ ab -n 1000 -c 1000 //xxx.nakayan.jp/
~ばっさり略~
Requests per second: ? ?1834.70?[#/sec] (mean)
~ばっさり略~

なるほどー PageSpeedが効いているとは言え単一画像のページだから、何もしなければこのくらいは処理ができるのか。 試しにminecraftを走らせると、1300くらいになる。 じゃぁプラグインとか止めていこうか。

全部のプラグインを止めると、それなりに効果があった。 だけど、この遅さが治ったわけじゃない。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 1.25 [#/sec] (mean)
~ばっさり略~

元々プラグインは多くないので、必要そうなプラグインに絞っても元通りになるだけだし、テーマも軽量なので変更しても目に見える変化は無い。

と思いきや、0.56とか叩き出したので何が起こったのかと慌てたら、子供がminecraftサーバにログインして遊んでいた。 topコマンドで見てみると、ログインしてると常時30%程度のCPU負荷があるようだ。 二人目が入ってくると40%程になる。 すごいな。 ここも設定見直しで対応できるのか後で調べてみよう。

PageSpeedをONにしても変化無し、でもWP-Super Cacheを入れたら劇的に改善した。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 95.43?[#/sec] (mean)
~ばっさり略~

WP-Super Cacheを使う時は、マルチドメイン用の設定ファイルに追記が必要だ。 詳しくはココを参照。

これだとDB等のチューニングができないので、いったんキャッシュは停止して他の設定を見直そう。

ではPHPやMySQLNginxの設定を確認していこうか。

参考にしたのは下記。

いやー勉強になります。 ありがとうございます。

TOPコマンドを見る限りは、php-fpmがだいぶCPUもメモリも食っているようなので、PHP関連の設定を見直す。

$ sudo vim /etc/php-fpm.d/www.conf

まず、上記参考サイトの下記設定を投入。

listen = /var/run/php-fpm.sock
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
pm = static
pm.max_children = 5
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_admin_value[upload_max_filesize] = 16M
php_admin_value[post_max_size] = 16M

listenポートをUNIXソケットに変更したので、Nginxの設定も同じように修正する。

$ sudo vim /usr/local/nginx/conf/nginx.conf

下記をUNIXソケットに書き換える。

fastcgi_pass?? 127.0.0.1:9000;

fastcgi_pass?? unix:/var/run/php-fpm.sock;

php-fpmとNginxを再起動

$ sudo /etc/rc.d/init.d/php-fpm restart
$ sudo /etc/rc.d/init.d/nginx restart

MySQLのチューニングもやってみよう。

?$ sudo vim /etc/my.cnf

参考サイトに倣って下記設定を投入。

character-set-server=utf8
symbolic-links=0
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_flush_method=O_DIRECT
query_cache_size=128M
query_cache_limit=2M
query_cache_min_res_unit=4k
query_cache_type=1
tmp_table_size=128M
max_heap_table_size=128M
table_open_cache=1024
max_allowed_packet=1M
sort_buffer=256K
read_buffer_size=256K
read_rnd_buffer_size=256K
join_buffer_size=256K
key_buffer_size=16M
max_connections=256
thread_cache=256
wait_timeout=60

MySQLを再起動する。

$ sudo/etc/rc.d/init.d/mysqld restart

これだけで結果は全く変わった。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 3.62 [#/sec] (mean)
~ばっさり略~

すごい。6倍になって桁が変わった。

試しにWP-Super CacheをONにしてみると、負荷を高めても7,000とか8,000とかいく。

$ ab -n 10000 -c 100 /
~ばっさり略~
Requests per second: 7896.42 [#/sec] (mean)
~ばっさり略~

WP-Super CacheをOFFに戻してGTmetrixで測定しても、劇的に改善している。

GTmetrix2015-01-20

オレはどんだけ適当な設定を投入していたというのか。

他に、オレの初心に立ち返り、まずはパッケージのnginxからインストールをやり直してみよう。

最新版を落とすための設定をする。

$ sudo rpm -ivh //nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

後は普通にインストール。

$ yum install nginx

でも変化が無い。 やっぱり元に戻す。 次にPHPアクセラレータのeAcceleratorも導入してみる。

$ wget //github.com/eaccelerator/eaccelerator/archive/master.zip
$ unzip master.zip
$ cd eaccelerator-master/
$ phpize

ここでエラーになってしまった。

Can’t find PHP headers in /usr/include/php
The php-devel package is required for use of this command.

php-develが無いと。 ではパッケージからインストールしよう。

$ sudo yum install php-devel

ここでもエラーが! 依存性エラーとか面倒なのきちゃったな、コレ。

エラー: パッケージ: php-devel-5.3.3-40.el6_6.x86_64 (updates)
要求: php(x86-64) = 5.3.3-40.el6_6
インストール: php-5.4.36-1.el6.remi.x86_64 (@remi)
php(x86-64) = 5.4.36-1.el6.remi
利用可能: php-5.3.3-38.el6.x86_64 (base)
php(x86-64) = 5.3.3-38.el6
利用可能: php-5.3.3-40.el6_6.x86_64 (updates)
php(x86-64) = 5.3.3-40.el6_6

インストールされているPHP関連のパッケージをチェックしてみよう。

$ rpm -qa | grep php

ずらっとこんな感じ。

phpmyadmin-2.11.11.3-2.el6.rf.noarch
php-cli-5.4.36-1.el6.remi.x86_64
php-5.4.36-1.el6.remi.x86_64
php-gd-5.4.36-1.el6.remi.x86_64
php-common-5.4.36-1.el6.remi.x86_64
php-pear-1.9.5-3.el6.remi.noarch
php-pdo-5.4.36-1.el6.remi.x86_64
php-mbstring-5.4.36-1.el6.remi.x86_64
php-mysql-5.4.36-1.el6.remi.x86_64
php-mcrypt-5.4.36-1.el6.remi.x86_64
php-xml-5.4.36-1.el6.remi.x86_64
php-pecl-apc-3.1.15-0.4.20130912.el6.remi.5.4.x86_64
php-fpm-5.4.36-1.el6.remi.x86_64
php-process-5.4.36-1.el6.remi.x86_64

しょうがないから、アップデートを兼ねて下記コマンドでインストール。

$ sudo yum install –enablerepo=remi –enablerepo=remi-php55 php-devel

パッケージの状態を確認。

$ rpm -qa | grep php

おお、ちゃんと入ったよ。 赤字が更新されたパッケージ。

phpmyadmin-2.11.11.3-2.el6.rf.noarch
php-cli-5.4.37-1.el6.remi.x86_64
php-5.4.37-1.el6.remi.x86_64
php-gd-5.4.37-1.el6.remi.x86_64
php-common-5.4.37-1.el6.remi.x86_64
php-pear-1.9.5-3.el6.remi.noarch
php-pdo-5.4.37-1.el6.remi.x86_64
php-devel-5.4.37-1.el6.remi.x86_64
php-mbstring-5.4.37-1.el6.remi.x86_64
php-mcrypt-5.4.37-1.el6.remi.x86_64
php-xml-5.4.37-1.el6.remi.x86_64
php-pecl-apc-3.1.15-0.4.20130912.el6.remi.5.4.x86_64
php-mysql-5.4.37-1.el6.remi.x86_64
php-fpm-5.4.37-1.el6.remi.x86_64
php-process-5.4.37-1.el6.remi.x86_64

では仕切り直してもう一度。

$ phpize

結果はこうなって、configureファイルが作成される。

Configuring for:
PHP Api Version:???????? 20100412
Zend Module Api No:????? 20100525
Zend Extension Api No:?? 220100525

では早速。

$? ./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config

ずらずらとメッセージが表示されて、エラーが無く終了したらmakeしてインストール。

$ make
$ sudo make install

インストールされたか確認。

$ php -v

eacceleratorの記載があればOK。

PHP 5.4.37 (cli) (built: Jan 21 2015 11:11:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with eAccelerator v1.0-dev, Copyright (c) 2004-2012 eAccelerator, by eAccelerator

システムへの適用前に、設定ファイルをコピーして編集する。

$ sudo cp eaccelerator.ini /etc/php.d/
$ sudo vim /etc/php.d/eaccelerator.ini

キャッシュ用ディレクトリはデフォルトの設定通りの場所に作ってもいいけど、気分で変えた。

eaccelerator.cache_dir = “/tmp/eaccelerator”

eaccelerator.cache_dir = “/var/cache/eaccelerator

上記で設定したキャッシュ用ディレクトリの作成。

$ sudo mkdir /var/cache/eaccelerator
$ sudo chmod 755 /var/cache/eaccelerator

管理者用の情報をWebで見ることができるので、PHPファイルをコピーしてユーザ名とパスワードを設定する。

$ sudo cp control.php /var/www/nky/
$ sudo vim /var/www/nky/control.php

デフォルト設定の赤字の部分を、わかりにくいものに変更しておくこと。

/*** CONFIG ***/
$auth = true;?????????? // Set to false to disable authentication
$user = “admin“;
$pw = “eAccelerator“;

ここまでやったら、システムに変更を適用するためにphp-fpmを再起動。

$ sudo /etc/init.d/php-fpm restart

念のため、既にPHPアクセラレータのphp-pecl-apcがインストールされているので削除する。

$ sudo yum erase php-pecl-apc

さて、パフォーマンスはどう改善されただろうか。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 6.76 [#/sec] (mean)
~ばっさり略~

なんと、さっきと比べて2倍、当初比で10倍以上パフォーマンスが上がった! 管理者画面の情報も確認。

eAcceleratorControlPanel

良い感じじゃないですかー♪ JetPackプラグイン外してPageSpeedを効かすと、さらに改善。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 7.67 [#/sec] (mean)
~ばっさり略~

とりあえず当初比で14倍くらい速くなったけど、まだバックエンドサーバがうまく設定できていない。

諦めずにバックエンドサーバの設定ファイルを作る。

$ sudo vim backend.conf

中身はこう。

server {
??? listen unix:/var/run/nginx-backend.sock;
??? server_name? _;
??? root?? /var/www/nakayan.jp;
??? access_log? /var/log/nginx/access.backend.log backend;

??? gzip????????????? off;
??? gzip_vary???????? off;

??? location / {
??????? index? index.php index.html index.htm;
??????? try_files $uri $uri/ /index.php?$args /index.php?q=$uri&$args;
??? }

??? location ~ \.php$ {
??????? try_files $uri =404;
??????? expires??????? off;
??????? fastcgi_pass?? phpfpm;
??????? fastcgi_index? index.php;
??????? fastcgi_param? SCRIPT_FILENAME? $document_root$fastcgi_script_name;
??????? include??????? fastcgi_params;
??????? fastcgi_param? REMOTE_ADDR????? $http_x_real_ip;
??????? fastcgi_pass_header "X-Accel-Redirect";
??????? fastcgi_pass_header "X-Accel-Buffering";
??????? fastcgi_pass_header "X-Accel-Charset";
??????? fastcgi_pass_header "X-Accel-Expires";
??????? fastcgi_pass_header "X-Accel-Limit-Rate";
??? }
}

バーチャルホスト用のファイルも書き換える。

トップページが表示されてやった!と思ったのもつかの間、どこをクリックしてもトップページになってしまう。

うーん、時間も無いから、バーチャルホストの設定だけ戻してお茶を濁すか。

ちなみに、PageSpeedをOFFにして、WP-Super CacheをONで負荷をかけて計ると、こんな驚異的な数値が。

$ ab -n 10000 -c 100 /
~ばっさり略~
Requests per second: 8668.07 [#/sec] (mean)
~ばっさり略~

ローカルでキャッシュが効きまくっているから早いんだろうけど、体感的な早さではPageSpeedが効いていた方が早い。 WP-Super CacheをOFFにして、PageSpeedをONにした時の数字はコレ。

$ ab -n 10 -c 10 /
~ばっさり略~
Requests per second: 7.83 [#/sec] (mean)
~ばっさり略~

両方ともONでコレ。 当初比で200倍。 すげぇ。

$ ab -n 1000 -c 100 /
~ばっさり略~
Requests per second: 111.15 [#/sec] (mean)
~ばっさり略~

奥が深くて難しいなぁ。 楽しいけど(笑

もう少しココでも読んで、基本から勉強しよう。