機能を制限してパフォーマンスの向上を。
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)を利用して測定していたが値としては整理しきれていないので詳細なチューニングはまた今度行う。
あれ?結局放置していただけでなにもチューニングになってないやん!っというおちか。。。