ServerMan(Entry)からさくらインターネットVPS(1G)プランへの変更で速度3倍、容量10倍に

Read More

現行の、ServerMan(Entry)かSakuraのVPSに変更をしてみたくなりました。

Medium 5571328098
photo credit: mrhayata via photo pin cc

というのも先日から980円/月のプランがメモリ1Gとなりディスク容量100Gになるということで楽しみにしていたのですが無料期間があったのでちょっと仕事で触ってみたら2Coreで、結構早かったのでそのまま遊びで使おうと思った次第です。

適当にやっていたのでメモも無いのでブログエントリーしてもお話しにならないのですがメモ的に書いておきます。

OS周りの設定

今から思えば64bitにしておけば良かったですが32bitいれてしましましたがUbuntuに変更しました。コントロールパネルから再導入が出来ます。だいたい15分くらいから30分程度で出来上がり。便利になりましたね。ServerManと違って仮想コンソールがOS上のアプリで作られているわけではないのでシリアルコンソール的にブラウザから動かせるのは良いですね。(ServerManはApache上で動くアプリで実現されていました)

初期に動作していたサービスのうちいくつかは不要だと思われるので停止しておきます。

/etc/init.d/ondemand
・負荷がかかるとクロック数を上げるための物
・動的にCPUクロックや電圧を変更するcpufreqの概要とcpufreqdデーモンについて – 試験運用中なLinux備忘録 http://d.hatena.ne.jp/kakurasan/20070720/p1

/etc/init.d/pppd-dns
/etc/init.d/dns-clean
・PPPD関連
・ダイヤルアップ環境でDNS情報をクリアする

/etc/init.d/grub-common
・画像の処理?

それ以外は特にいじるところもなさそうなのでこのままですが、SSHの接続用に鍵の設定をしていることと日本語UTF8を設定を導入しています。

導入アプリケーション

nginx
spawn-fcgi
php-apc php5-cgi php5-cli php5-common php5-curl php5-gd
mysql-server

使っているのは主にこのアプリになのでがさっと aptitude install でことたりるのは非常に便利。nginxは標準では古いバージョンなので別のソースを追加します。

deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main

またダウンロードするには key登録が必要なので apt-key で登録をしておきます。この辺りは 「さくらのVPS 2G」+ Ubuntuで”WordPress on nginx with FastCGI”環境を構築する – Hinemosu を参考に行いました。

構成ファイルなどはすべて現行のServermanで利用しているものをコピーして使用することにしました。基本的には同じバージョンなので問題ありません。移行自体は簡単ですね。設定ファイルがそのままだとメモリの使用条件などが違うので後で設定をする必要があります。

データ移行

データの移動は基本的にはもとのservermanからコピーして行います。ファイルの転送にはRsyncを利用して行うと便利に進みますね。Ubuntuは基本でSSHを利用するようになっているので

export RSYNC_RSH='ssh -p xxxx'

と定義した上で rsync -avz 〜 として利用します。当然元のserverman側のサーバにはrsyncを導入(起動)しておく必要があります。これを利用して /var/www/ 以下や各種構成ファイル /etc/nginx 以下などをすべて移動しておきます。nginx、mysql、等は /etc/ 以下の設定ファイルを移動させておく。忘れがちなのが /etc/php5/cgi/php.ini も必要です。またfastcgiを経由させるためにいくつか手で作ったファイルがあるのでそれも移動させておきます。 /usr/bin/php-fastcgi と /etc/init.d/php-fastcgi など

この辺りの nginxなどの設定については以下のサイトなどを参考にして以前設定しました。

mysqlのデータベースの移行は、新しい側でデータベースとユーザの作成を行い、元の方で mysqldump を使用してsqlでダンプしたものを読み込ませれれば問題ありません。データベースを作成した際には文字コードをUTF8にしておきます。

# mysqldump -u user -p db_name > wordpress_dump.sql

この生成したファイルをsakura側にrsyncで移動した後に # mysql -u user -p < wordpress_dump.sql でインポートする事が出来ます。

とりあえず

ももう少し設定をしているのですが一応動きました。もう少しチューングをしていきたいので落ち着いたら設定内容を書いていきたいと思います。基本はServerManと同様の構成なのですがメモリが若干自由に使えるのとやはりCPUが早いですね。

というわけで参考値、体感的にも十分に早くなっているようなのでチューニングは完了していないのですがもう勢いでDomainの設定もかえて使い始めてしまいました(^^;

旧サーバ(ServerMan)

Generated in 2.363 seconds. Made 88 queries to database and 29 cached queries. Memory used - 13.4MB

新サーバ(Sakura VPS)

Generated in 0.823 seconds. Made 88 queries to database and 29 cached queries. Memory used - 13.37MB

実際に3倍程度早いですね。もともと色々設定をしているので一概には言えませんがか500円/月から980円/月なのでコスパ高いですね!


最後にUnixbenchの結果も乗せておきます。

旧サーバ(ServerMan)

ServersMan » ServersMan@VPS
========================================================================
BYTE UNIX Benchmarks (Version 5.1.2)

System: dti-vps-srv-32: GNU/Linux
OS: GNU/Linux -- 2.6.18-194.3.1.el5.028stab069.6 -- #1 SMP Wed May 26 18:31:05 MSD 2010
Machine: i686 (unknown)
Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
CPU 0: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4522.1 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
20:46:26 up 74 days, 11:03, 1 user, load average: 0.74, 0.75, 0.76; runlevel 2

------------------------------------------------------------------------
Benchmark Run: 金 5月 04 2012 20:46:26 - 21:20:04
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 3015557.0 lps (10.0 s, 7 samples)
Double-Precision Whetstone 1549.8 MWIPS (10.0 s, 7 samples)
Execl Throughput 817.7 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 94185.7 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 35093.4 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 244517.8 KBps (30.0 s, 2 samples)
Pipe Throughput 228545.8 lps (10.0 s, 7 samples)
Pipe-based Context Switching 66942.9 lps (10.2 s, 7 samples)
Process Creation 2415.1 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 1187.0 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 152.0 lpm (60.2 s, 2 samples)
System Call Overhead 204129.7 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 3015557.0 258.4
Double-Precision Whetstone 55.0 1549.8 281.8
Execl Throughput 43.0 817.7 190.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 94185.7 237.8
File Copy 256 bufsize 500 maxblocks 1655.0 35093.4 212.0
File Copy 4096 bufsize 8000 maxblocks 5800.0 244517.8 421.6
Pipe Throughput 12440.0 228545.8 183.7
Pipe-based Context Switching 4000.0 66942.9 167.4
Process Creation 126.0 2415.1 191.7
Shell Scripts (1 concurrent) 42.4 1187.0 279.9
Shell Scripts (8 concurrent) 6.0 152.0 253.3
System Call Overhead 15000.0 204129.7 136.1
========
System Benchmarks Index Score 224.9

新サーバ(Sakura VPS)

VPS(仮想専用サーバ)のさくらインターネット
========================================================================
BYTE UNIX Benchmarks (Version 5.1.2)

System: ubuntu: GNU/Linux
OS: GNU/Linux -- 2.6.32-41-generic -- #88-Ubuntu SMP Thu Mar 29 13:08:43 UTC 2012
Machine: i686 (unknown)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Xeon(R) CPU E5645 (4800.2 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
CPU 1: Intel(R) Xeon(R) CPU E5645 (4800.2 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
20:45:36 up 8:09, 1 user, load average: 0.17, 0.07, 0.02; runlevel 2

------------------------------------------------------------------------
Benchmark Run: 金 5月 04 2012 20:45:36 - 21:13:00
2 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 16610722.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2452.3 MWIPS (7.4 s, 7 samples)
Execl Throughput 1985.2 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 590728.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 156954.2 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1452384.3 KBps (30.0 s, 2 samples)
Pipe Throughput 899165.2 lps (10.0 s, 7 samples)
Pipe-based Context Switching 152754.7 lps (10.0 s, 7 samples)
Process Creation 5876.4 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 3622.0 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1136.1 lpm (60.0 s, 2 samples)
System Call Overhead 939907.7 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 16610722.9 1423.4
Double-Precision Whetstone 55.0 2452.3 445.9
Execl Throughput 43.0 1985.2 461.7
File Copy 1024 bufsize 2000 maxblocks 3960.0 590728.4 1491.7
File Copy 256 bufsize 500 maxblocks 1655.0 156954.2 948.4
File Copy 4096 bufsize 8000 maxblocks 5800.0 1452384.3 2504.1
Pipe Throughput 12440.0 899165.2 722.8
Pipe-based Context Switching 4000.0 152754.7 381.9
Process Creation 126.0 5876.4 466.4
Shell Scripts (1 concurrent) 42.4 3622.0 854.3
Shell Scripts (8 concurrent) 6.0 1136.1 1893.5
System Call Overhead 15000.0 939907.7 626.6
========
System Benchmarks Index Score 846.5

------------------------------------------------------------------------
Benchmark Run: 金 5月 04 2012 21:13:00 - 21:40:28
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables 33404176.2 lps (10.0 s, 7 samples)
Double-Precision Whetstone 4903.8 MWIPS (7.8 s, 7 samples)
Execl Throughput 8028.6 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 935099.7 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 250020.6 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 2438711.3 KBps (30.0 s, 2 samples)
Pipe Throughput 1819739.6 lps (10.0 s, 7 samples)
Pipe-based Context Switching 453177.8 lps (10.0 s, 7 samples)
Process Creation 28099.2 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 9069.8 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1171.0 lpm (60.0 s, 2 samples)
System Call Overhead 1776071.9 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 33404176.2 2862.4
Double-Precision Whetstone 55.0 4903.8 891.6
Execl Throughput 43.0 8028.6 1867.1
File Copy 1024 bufsize 2000 maxblocks 3960.0 935099.7 2361.4
File Copy 256 bufsize 500 maxblocks 1655.0 250020.6 1510.7
File Copy 4096 bufsize 8000 maxblocks 5800.0 2438711.3 4204.7
Pipe Throughput 12440.0 1819739.6 1462.8
Pipe-based Context Switching 4000.0 453177.8 1132.9
Process Creation 126.0 28099.2 2230.1
Shell Scripts (1 concurrent) 42.4 9069.8 2139.1
Shell Scripts (8 concurrent) 6.0 1171.0 1951.7
System Call Overhead 15000.0 1776071.9 1184.0
========
System Benchmarks Index Score 1818.3

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

Read More

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 にした []

[wp] WordPressの高速化のために幾つか実施

以前からちょっと重かったのですが腰も重くて何もいじっていなかったのですが幾つか修正。

WordPressのプラグイン

DB Cache Reloaded (http://www.poradnik-webmastera.com/projekty/db_cache_reloaded/)

  • WordPressからDBのアクセスをキャッシュしてくれるプラグインです。しばらく前に使用できなくなっていたのですが有効化してみたら動きました。
  • 個人的にはかなり効果の高いプラグインで使用できるのであればお勧めです。特にDBがあまり高速な環境にない場合には有効かと思います。SakuraレンタルサーバなどもMySQLサーバは共有サーバなので有効でした。

WP Hyper Response(http://stocker.jp/diary/wp-hyper-response/

  • 最近しったプラグインです。
  • flush()関数を利用して早く見せる事ができるプラグインです。実際に導入後体感的に早くなっている気がします。他のプラグインと併用して使用可能ですので一度利用してみるといいかと思います。

 

PHPの高速化(APC)

  • このサーバはFastcgi経由でPHPをCGIモードで動作させています。OSはUbuntu 10.04.3 LTSとなります。パッケージの導入は 「# apt-get install php-apc 」で簡単に入れることが出来ました。特に設定は要りませんが 「/etc/init.d/php-factcgi restart」 で /usr/bin/php5-cgi を再起動させています。無事に読み込まれているかは phpinfo(); で確認するとわかります(読まれていればAPCの定義があります)

 

その他の実施した項目としてWordpressのプラグインのうち「WP Social Bookmarking Light」を停止しました。便利かと思ってつけているのですがあまり利用された形跡もないので思い切って外しています。代わりに?Zenbackの側でソーシャル系のボタンを表示させています(G+もね)。蛇足的にはGoogle Adsenseの広告を一つ減らしました。最近あまりクリックされていないので(^^;