nginx + fastcgi (php5-cgi ) + mySQL on Serversman(Entory) でのチューニング

nginx

機能を制限してパフォーマンスの向上を。

WordPressは結構富豪な感じのブログなのでパワーを食う。

ServersManに移動してから完全に放置していたので最近遅くなったようなぁと思いながらもそのままにしてしまっていた。また借りていた当初に比べて空きがなくなってきたのかなんか全体的に遅くなってきたような気がしている。

この一番安いEntryプランはメモリ 256M (保証1G)となっている。実際に固定で割り当てられているメモリは 256Mとなっていて後は空き次第らしい。1 という訳で覗いてみると。

root# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Feb15 ?        00:00:12 init
www-data  3391 50628  2 09:53 ?        00:07:06 /usr/bin/php5-cgi
www-data  5419 50628 12 14:19 ?        00:01:11 /usr/bin/php5-cgi
www-data 34756 50628  0 Sep14 ?        00:00:03 /usr/bin/php5-cgi
root     42137     1  0 Feb15 ?        00:01:04 cron
syslog   42184     1  0 Feb15 ?        00:00:34 /sbin/syslogd -u syslog
www-data 46403     1  0 Feb22 ?        00:00:00 /usr/bin/perl /usr/bin/fastcgi-wrapper.pl
www-data 46750 50628  0 Oct29 ?        00:05:06 /usr/bin/php5-cgi
www-data 50628     1  0 Aug26 ?        00:00:00 /usr/bin/php5-cgi
root     50704 58564  0 14:29 ?        00:00:00 sshd: root@pts/1 
root     50786 50704  0 14:29 pts/1    00:00:00 -bash
root     50987 50786  0 14:29 pts/1    00:00:00 ps -ef
www-data 51056 50628  0 01:25 ?        00:07:10 /usr/bin/php5-cgi
mysql    52964     1  0 Mar26 ?        03:09:37 /usr/sbin/mysqld
www-data 56366 50628  0 Oct03 ?        00:03:41 /usr/bin/php5-cgi
root     58564     1  0 Aug26 ?        00:00:00 /usr/sbin/sshd
root     58936     1  0 Aug26 ?        00:00:00 /usr/sbin/xinetd -pidfile /var/run/xinetd.pid -stayalive -
root     59067     1  0 Aug26 ?        00:00:00 nginx: master process /usr/sbin/nginx
www-data 59091 59067  0 Aug26 ?        00:10:16 nginx: worker process
www-data 59092 59067  0 Aug26 ?        00:10:04 nginx: worker process
www-data 59093 59067  0 Aug26 ?        00:10:00 nginx: worker process
www-data 59094 59067  0 Aug26 ?        00:10:17 nginx: worker process
www-data 59095 59067  0 Aug26 ?        00:00:52 nginx: cache manager process
root# free
             total       used       free     shared    buffers     cached
Mem:       1048576     544784     503792          0          0          0
-/+ buffers/cache:     544784     503792
Swap:            0          0          0

当初はこんな感じ、なんか以前は普通にセットアップして

root# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2464  1416 ?        Ss   Feb15   0:12 init
www-data  7204  2.9  4.1  78976 43060 ?        S    19:48   0:43 /usr/bin/php5-cgi
root      9355  0.0  0.5   7300  5556 ?        Ss   Nov13   0:00 /usr/sbin/munin-node
mysql    12108  3.9  0.8  41560  8536 ?        Ssl  20:13   0:00 /usr/sbin/mysqld
root     13488  0.0  0.0   2360   916 pts/1    R+   20:13   0:00 ps aux
www-data 32273  0.0  0.7  65020  7508 ?        Ss   Nov13   0:00 /usr/bin/php5-cgi
root     32583  0.0  0.1  14236  1192 ?        Ss   Nov13   0:00 nginx: master process /usr/sbin/nginx
www-data 32584  0.0  0.2  14728  2544 ?        S    Nov13   1:15 nginx: worker process
www-data 32585  0.0  0.1  14236  1552 ?        S    Nov13   0:00 nginx: cache manager process
root     40660  0.0  0.0   2420   888 ?        Ss   Nov12   0:00 /usr/sbin/xinetd -pidfile /var/run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
root     42137  0.0  0.0   2300   912 ?        Ss   Feb15   1:04 cron
syslog   42184  0.0  0.0   1912   700 ?        Ss   Feb15   0:34 /sbin/syslogd -u syslog
root     44401  0.0  0.3   9024  3440 ?        Rs   19:19   0:00 sshd: root@pts/1
root     44507  0.0  0.1   3112  1832 pts/1    Ss   19:19   0:00 -bash
www-data 46403  0.0  0.2   5140  2772 ?        Ss   Feb22   0:00 /usr/bin/perl /usr/bin/fastcgi-wrapper.pl
root     58564  0.0  0.0   5468   940 ?        Ss   Aug26   0:00 /usr/sbin/sshd
www-data 64767  2.5  3.7  78720 39680 ?        S    19:45   0:41 /usr/bin/php5-cgi

root# free
             total       used       free     shared    buffers     cached
Mem:       1048576     160084     888492          0          0          0
-/+ buffers/cache:     160084     888492
Swap:            0          0          0

いまはこのようになっている。ログがなかったので今回分は ps aux で確認している。メモリの使用量が半減しているのが (544M –> 160M )見ていただけていると思う。多分普通にリソースがあるサーバですることではない。変更点は以下のとおり

 

1. nginx

・worker_processes 5 –> 1 仮想CPUの割当が1つしか無い様なの同時実行すうを削減

・worker_connections 256 –> 1000 worker_processesの変更に伴い逆にコネクション数は上げる

・Keep alive  -> 0  DoS攻撃の対策にも0に設定する

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
stepping        : 5
cpu MHz         : 903.096
cache size      : 8192 KB
physical id     : 1
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 16
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm
bogomips        : 4522.10
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management: [8]

2. fast-cgi (php5-cgi )

アプリケーションサーバである fast-cgi も以前は複数起動していたがこれも削減する。実際には1サーバあたり100M程度利用しているので(共有メモリは考えないで)これも変更する (/usr/bin/php-fastcgi)

変更:5 –> 2 2

 

3.MySQL

一番メモリを大量に消費しているのはMySQL。普通に何もしないと512M~1024Mほど消費されてしまうのではないのかと。ちょっと導入した直ぐ後の構成が無いので不明ですが。ディフォルトのMySqlの設定だとInnoDBが利用できるように成っていますがWordpress的には全てのテーブルはMyISAMで作成されています。( show tables status で確認できますので要確認)、この場合InnoDBに変更も出来ますがトランザクションが少ないなら特にこのままでも良いのでMySQL側でInnoDBを利用しないように修正します。

-skip-innodb 

上記を /etc/mysql/my.cnf に追記して再起動 (service mysql restart )するとメモリが激減しているのがわかる。他にもかなりパラメータを貧素に変更しているのでパフォーマンスは落ちているカンジがするのでこのあたりは少しづつ上げていきたい。

 

4. まとめ

今後の方針としてはパフォーマンスを上げるためにリソースを使用する方向でチューニングをしていきたいがまずは貧祖にする方向に一度フルことで確認が出来るかなぁと思っている所。数値的に正しく検証を取るべきなのだろうがちょっとそこまでできていない。MySQLのパラメータを結構弄ったら MUNINの監視項目「 MySQL slow queries 」の項目の値が 200m付近から300m付近になってしまったのでこのあたりを戻していければと思う次第(代わりにメモリはだいぶ稼げた)。また同時接続ユーザはこのブログはとても少ないので(^^; nginxやfast-cgiのプロセス数の現象自体は影響が出てないと思っているのだがその辺りも検証していきたい。少なくとも此方側で言えば、io sleep や loadave の数値は改善されている。

最後に、mysqlで削減できた分は fast-cgi (php5-cgi )のプロセスを 2 –> 3 に増加させることで使用してみた。

途中経過としては ab (apaceh bentch)を利用して測定していたが値としては整理しきれていないので詳細なチューニングはまた今度行う。

 

あれ?結局放置していただけでなにもチューニングになってないやん!っというおちか。。。

  1. 空きがない場合には仮想側では実際にはスワップしているけど仮想ホスト側では物理メモリでスワップしていないように見えるという理解でいいのかな? []
  2. 最終的には 3 にした []
上部へスクロール