アーカイブ

‘mysql’ カテゴリーのアーカイブ

さくらVPSの弱小サーバのチューニング(仮)

2017 年 6 月 16 日 Comments off

いろいろとサーバ構築時からさまざまな対処をしていきましたが、ここらである程度行った
パフォーマンスチューニングを備忘録的に記述しておこうと思います。

まず、サーバスペックの紹介
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を使用して判断したいと思います。

 

*****************************************************************************

ブログランキング・にほんブログ村へ
にほんブログ村

PVアクセスランキング にほんブログ村

カテゴリー: apache, Linux, mysql タグ: