さくらVPSの弱小サーバのチューニング(仮)
いろいろとサーバ構築時からさまざまな対処をしていきましたが、ここらである程度行った
パフォーマンスチューニングを備忘録的に記述しておこうと思います。
まず、サーバスペックの紹介
CENTOS 6.5
メモリ1GB
HDD 100GB
CPU 2コア
このようにメモリが1GBしかなく結構つめつめの状態で運用
この上にAPACHE+PHP(wordpress)+Mysqlなどが動いている状態です。
今まで経過したなかで行ったことと最近実施した事項等ありますが
とりあえずわかる範囲で過去の投稿分についても紹介します。
apacheの設定
当然ですがhttpd.confでの設定になります。
まず取り込むモジュールを減らすことで一個プロセスのメモリ使用量も変わります。
LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_alias_module modules/mod_authn_alias.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule authz_default_module modules/mod_authz_default.so #LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule mime_magic_module modules/mod_mime_magic.so #LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule substitute_module modules/mod_substitute.so LoadModule rewrite_module modules/mod_rewrite.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule cgi_module modules/mod_cgi.so #LoadModule version_module modules/mod_version.so
以上のものは、デフォルトだとすべてのものを取り込むためその分メモリも必要となりますが、
冒頭に「 # 」がついていないものだけを取り込むようにしています。
もし、デフォルトのままの方がいたら#でコメントアウトしてhttpdの再起動してみてください。
数Mバイトですが少ないメモリには、効果的面と思います。
そのほか、「 maxclients 」のキーワードで訪問される方がしますのでもう一度設定の見直しを
デフォルト(2014年11月再インストール直後)
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
2017年6月現在の設定
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 60
MaxClients 15
MaxRequestsPerChild 150
MaxMemFree 1024
</IfModule>
それほどアクセス数が伸びるサーバではないので(月間ページビュー(PV))も1万ちょっと
このくらいのブログサーバだと現在の設定でもとくにストレスなく表示されているのかなと思います。
実際のHTTPDプロセスをTOPコマンドで確認してみると常時プロセスは、10個~13個前後で安定しているようです。
top - 06:25:57 up 7 days, 13:28, 1 user, load average: 0.54, 1.00, 1.08 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1019952k total, 908040k used, 111912k free, 79792k buffers Swap: 2097148k total, 713752k used, 1383396k free, 187140k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24295 apache 20 0 328m 57m 5556 S 0.0 5.8 0:06.63 httpd 17807 apache 20 0 337m 52m 4452 S 0.0 5.3 8:26.91 httpd 24215 apache 20 0 324m 52m 5328 S 0.0 5.3 0:04.88 httpd 23494 apache 20 0 301m 42m 4492 S 0.0 4.3 0:04.31 httpd 23687 apache 20 0 300m 41m 4516 S 0.0 4.1 0:08.34 httpd 23467 apache 20 0 301m 41m 4756 S 0.0 4.1 0:14.51 httpd 24213 apache 20 0 301m 40m 4732 S 0.0 4.1 0:03.12 httpd 24214 apache 20 0 298m 39m 4504 S 0.0 4.0 0:06.02 httpd 23493 apache 20 0 296m 37m 4480 S 0.0 3.7 0:06.90 httpd 23492 apache 20 0 296m 36m 4388 S 0.0 3.7 0:05.19 httpd 23689 apache 20 0 296m 36m 4452 S 0.0 3.7 0:05.51 httpd 20623 apache 20 0 294m 34m 4176 S 0.0 3.5 0:23.59 httpd 19312 apache 20 0 293m 33m 4104 S 0.0 3.3 0:27.29 httpd 1601 mysql 20 0 1332m 27m 3536 S 0.0 2.8 385:31.57 mysqld 1316 root 20 0 771m 10m 604 S 0.0 1.0 33:57.32 clamd 24560 root 20 0 102m 3476 2424 S 0.0 0.3 0:00.07 sshd 23541 postfix 20 0 81596 2432 1540 S 0.0 0.2 0:00.03 pickup 24562 ep71tarb 20 0 102m 1988 928 S 0.0 0.2 0:00.23 sshd
色々と他のサイトの方々のを参考にして行き着いたところがこの設定になっているのですが
今後は、もう少し空きメモリに余裕が出来ればもう少し増やしていきたいところです。
それとこの設定がベストかといわれたら多分NOでしょう。まだまだhttpd.confの設定を理解していないのと
ユーザの接続数についても違ってくるからです。その辺もぼちぼちと勉強して試していきたいと思います。
つづいての設定
php.iniの設定
こちらについては、先日phpのメモリ使用量も減らせないだろうかと調べてみるとそのような設定項目がありました。
398行目くらいの記述
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
この値がサーバメモリを消費している上限ですがこのメモリ上限も少し多いようです。
(参考 安全を考えてPHPの実行時設定を調整する)
実際には、わかりませんがメモリを最大使用する値の予想式は、以下になるようです。
memory_limitの値 x httpd.confのMaxClientsの値 = メモリ最大使用量
128M × 15 = 1920M = 1.9G
これじゃあ多すぎますね。
ということで
64M × 15 = 960M = 0.96G
参考にすると64M~128Mが多めにするときとなっておりPHPのWORDPRESSが動いているのであまり少なくすると動かなくなる可能性があるので64Mで設定しました。
memory_limit = 64M
この設定でぎりぎりサーバのメモリ内に収まる計算です(実際は、ほかのプロセスもあるのでそうは、いかないですが・・・)
SWAPファイル(2GB)への書き込み等は、CRONの関係で夜中の2~4時に多くなるが
昼間は、特に負荷になるプロセス(シェル)は、走らない仕様なので最小限のSWAPの使用にとどまっている。
vmstatで確認するとCPU使用率のidも大体が100%で大丈夫のようだ。
当然アクセスがあるときは、数値は変更するが昼間は、問題なく動作している。
swapのsi,so項目も2時~3時は、SWAPファイルの出し入れががあるがそのほかの時間帯は、問題ないので
メモリの枯渇には、なっていない。
ただ、常時SWAPを使用している状態がいい状態かどうかが今後の課題となりそうだ。
[root@www16071ue ~]# vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2017/06/16 00:00:01 0 1 649640 225740 45656 265072 0 0 1204 88 298 201 4 2 55 40 1 2017/06/16 00:01:01 0 1 649636 228208 46184 266976 0 0 4 80 70 64 0 0 50 50 0 2017/06/16 00:02:01 1 0 649504 183912 46636 290460 160 0 160 0 1348 896 36 1 49 11 3 2017/06/16 00:03:01 1 0 649348 168960 46896 298064 96 0 96 4 1372 665 45 1 50 4 1 2017/06/16 00:04:01 1 0 649236 158668 47096 303184 128 0 128 8 1028 401 37 1 50 12 1 2017/06/16 00:05:01 1 0 649152 151972 47288 307236 64 0 64 0 1115 400 42 0 50 8 0 2017/06/16 00:06:01 0 1 649076 145472 47456 310580 64 0 64 0 1000 313 38 1 49 10 3 2017/06/16 00:07:01 1 0 649012 139892 47616 313508 64 0 64 32 1216 363 47 1 50 2 1 2017/06/16 00:08:01 1 1 648916 127800 48064 316484 52 0 52 0 1606 1472 40 2 48 10 2 2017/06/16 00:09:01 1 0 648784 118136 48808 319100 32 0 36 0 1084 267 44 1 46 9 1 2017/06/16 00:10:01 1 0 648652 107928 48996 321520 32 0 32 0 871 230 34 1 48 16 2 2017/06/16 03:59:08 1 3 982648 55740 10256 72776 28 0 3216 120 851 283 30 2 1 68 1 2017/06/16 04:00:10 0 4 983448 63764 10664 66580 0 0 564 232 167 136 0 0 12 86 0 2017/06/16 04:01:06 1 5 984076 60684 9284 73616 24 0 2492 0 260 131 1 1 11 87 1 2017/06/16 04:02:05 0 3 984124 54908 6500 81876 0 0 3588 0 966 698 25 1 1 73 1 2017/06/16 04:03:03 1 2 984352 69568 5612 68176 0 0 2660 0 529 173 13 0 4 82 0 2017/06/16 04:04:03 0 2 984320 65980 5176 72340 28 0 1160 0 224 124 3 1 38 58 0 2017/06/16 04:05:03 0 3 990316 65056 8004 77048 64 96 500 188 220 139 0 0 0 99 0 2017/06/16 04:06:03 0 3 991160 67760 5780 76144 24 0 488 0 247 177 1 0 0 98 1 2017/06/16 04:07:01 0 4 991112 61500 7288 73460 0 0 544 0 385 348 4 1 0 95 1 2017/06/16 04:08:04 0 3 992108 62768 7420 77428 48 0 468 104 317 207 2 1 0 98 0 2017/06/16 04:09:03 0 3 992076 64028 8708 73200 0 0 1008 0 176 103 1 1 36 62 0 2017/06/16 04:10:04 0 6 991264 63416 9340 71004 32 0 836 0 220 121 1 0 0 98 0
TOPコマンドで確認すると以下になる。
今のところload averageも朝方の2~4時は、2~3前後まであがるがそれ以外の時間では、大体が1以下で問題ないようだ。
top - 00:00:01 up 5 days, 7:02, 0 users, load average: 0.00, 0.00, 0.00 Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie Cpu(s): 3.5%us, 0.2%sy, 0.1%ni, 90.7%id, 5.4%wa, 0.0%hi, 0.0%si, 0.2%st Mem: 996.047M total, 718.656M used, 277.391M free, 65.086M buffers Swap: 2047.996M total, 540.469M used, 1507.527M free, 184.191M cached
MYSQLの設定
もうひとつmysqlのメモリを使用している点
PID USER PR NI VIRT RES SHR S % CPU % MEM TIME+ COMMAND
1601 mysql 20 0 1332m 29m 3660 S 0.0 2.9 385:45.92 mysqld
この辺もある程度データベースのメモリの使用状況などもかんがみて設定変更したいところですが
次回mysql tunerを使用して判断したいと思います。
*****************************************************************************