128MB / vSwap 256MBサーバーの使い道(3)

本来なら潤沢なメモリーで安定したサーバーとしたいところだが、通信スピートや帯域、それから、ブラウザー環境を考えると、相当重たいサーバーで無い限りスピードを犠牲にする要素は、メモリー量なので、たとえメインメモリーが128MBしか割り当ててもらえないサーバーでも、OpenVZの特性を考えると、ホスト側から見たカーネルリソースは共有なので、似たようなプロセスが稼働していれば、極端なメモリーリークは起こらず、KVM仮想化などよりはずっと少ないメモリー消費で同様のプロセスが走行する性質がある。

また、サーバースペックがそこそこならば、OPCache,APCuといったPHP系のバイナリーCacheは、快適に稼働することがわかってきた。
このOPCacheというのは、FastCGIや、APCといったPHPベースの最適化が行うことが出来、比較的重いAjaxplorer(Pydio)などといったWEBファイルサーバーなどもこのOPCacheとAPCuを動作させることで、劇的にメモリー消費量が減り、本来は、PHPインタプリタがごそごそと動かなくてはならない重たい仕事を、バイナリープログラムとしての中間コードに翻訳されて動作するので、全く走らなかったAjaxplorerが軽快に走るようになった。
あわせて、WordPressは、PHPプログラムなので、基本的にApacheであるとか、Nginxなどが快適に動作していれば、相当の威力を発揮してくれているようだ。

OPCache+APCuの構築の仕方は、ググってもらうとして、簡単に動作環境などのポイントを書いてみたいと思う。
実施したのは以下。

  • PHPのバージョンアップ PHP 5.1.x →PHP 5.5.xへ(remi-php55を使用)
  • OPCache + APCuの導入
  • php.iniの見直し
  • Apache httpd.confの最適化(思い切って最小構成にしてみた)

と、以上の通り。

【php.ini】
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
;memory_limit = 128
Mmemory_limit = 24M ;16MBでも動作するが、24MBが最適だった
【apcu.ini】
; The size of each shared memory segment, with M/G suffixe
apc.shm_size=32M ;結局デフォルトのままでOKだった。
;apc.shm_size=16M ;16MBへ変更してももともと利用率が多くないのでトータル的に変わらなかった

【opcache.ini】
; The OPcache shared memory storage size.
opcache.memory_consumption=128 ;デフォルトのまま

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=8 ;デフォルトのまま
【Apache httpd.conf】

Timeout 5
KeepAlive on
KeepAliveTimeout 10
<IfModule prefork.c>
  StartServers 1
  MinSpareServers 1
  MaxSpareServers 2
  ServerLimit 25
  MaxClients 25
  MaxRequestsPerChild 1000
</IfModule>

※StartServers 1 は少ないように思うが、OPCacheと組み合わせると、これで充分だった。
通常は、この値を4~8にすると良いが、今のところ問題ない感じ。

この状態でのabを念の為にとってみた。

【abの結果】
# ab -n 1000 -c 25 http://px24.xaffy.net/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking px24.xaffy.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software: Apache
Server Hostname: px24.xaffy.net
Server Port: 80

Document Path: /
Document Length: 11950 bytes

Concurrency Level: 25
Time taken for tests: 1.317117 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 12229000 bytes
HTML transferred: 11950000 bytes
Requests per second: 759.23 [#/sec] (mean)
Time per request: 32.928 [ms] (mean)
Time per request: 1.317 [ms] (mean, across all concurrent requests)
Transfer rate: 9066.77 [Kbytes/sec] received

Connection Times (ms)
 min mean[+/-sd] median max
Connect: 0 0 1.2 0 8
Processing: 5 31 12.5 27 85
Waiting: 0 27 6.1 26 62
Total: 10 32 12.3 27 85

Percentage of the requests served within a certain time (ms)
 50% 27
 66% 29
 75% 31
 80% 35
 90% 55
 95% 59
 98% 66
 99% 72
 100% 85 (longest request)

充分すぎる結果となった。
1秒間に759リクエストもの処理が出来ている。(ネットワークオーバーヘッドなし。)

上記と同様の内容をネットワーク越しに実施してみると

$ ab -n 1000 -c 25 http://px24.xaffy.net/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking px24.xaffy.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache
Server Hostname: px24.xaffy.net
Server Port: 80

Document Path: /
Document Length: 11950 bytes

Concurrency Level: 25
Time taken for tests: 17.464 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 12229000 bytes
HTML transferred: 11950000 bytes
Requests per second: 57.26 [#/sec] (mean)
Time per request: 436.597 [ms] (mean)
Time per request: 17.464 [ms] (mean, across all concurrent requests)
Transfer rate: 683.83 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
Connect: 147 155 4.3 154 168
Processing: 149 278 96.6 267 927
Waiting: 148 277 96.6 267 927
Total: 296 432 97.5 422 1091

Percentage of the requests served within a certain time (ms)
 50% 422
 66% 445
 75% 457
 80% 463
 90% 479
 95% 624
 98% 794
 99% 803
 100% 1091 (longest request)

多少リクエスト処理が低下しているが、日本→Dallas,Texasの応答時間

【ping Test】
$ ping px24.xaffy.net
PING px24.xaffy.net (192.157.245.52) 56(84) bytes of data.
64 bytes from xx icmp_seq=1 ttl=47 time=159 ms
64 bytes from xx icmp_seq=2 ttl=47 time=167 ms
64 bytes from xx icmp_seq=3 ttl=47 time=159 ms
64 bytes from xx icmp_seq=4 ttl=47 time=159 ms
64 bytes from xx icmp_seq=5 ttl=47 time=158 ms
64 bytes from xx icmp_seq=6 ttl=47 time=159 ms
^C
--- px24.xaffy.net ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5511ms
rtt min/avg/max/mdev = 158.968/160.578/167.778/3.246 ms

平均、160.578msなので、まずまずの結果じゃないかと思う。

ということで、今回もtopのスクリーンショットを付けておく。Super-lite-01結論として、OPCache + APCu + PHP 5.5.xは、導入すべきで、当サイトのようなメモリー的に貧弱なサーバーであっても、個人レベルならば、充分に機能できている。
実は、国内の共用サーバーに収容してあったブログを訳あって、移設しなくてはならない羽目の結果なのだが、平均的に見ると、あまり変わらない結果が得られたので、良しとしておく。
当初の予定では、ここのサーバーは、DNS + Mail Serverオンリーで使う予定だったのだが、思わぬ展開である。
OpenVZは、あまり自由度が効かないので、Fuseや、Asteriskといった専用デバイスポート(ノード)が必要な用途には向かないが、そこそこのファイル共有サーバーとしては、共用サーバーよりもセキュリティー面で安心なので、安価なサーバーが存在する価値は大きいのではないだろうか。
一時的に退避した環境なので、いずれは移設することになるが、このままでも充分に機能してくれそうでもある。