カテゴリー
Linux

【CentOS】実メモリ使用量を少し減らして、スワップを抑えられないか試しました!★WordPress サーバ☆【試行錯誤】

わたくしたちのブログが乗っている VPS のメモリ使用量が多すぎませんこと!?

  • メモリ 1024 MB の内、994 MB を使用、余りが 29 MB とメモリの余裕はほとんどない
  • スワップは 1024 MB の内、18 MB を使用、余りが 1005 MB とスワップの余裕はずい分ある
[root@oki2a24 ~]# free -mt
             total       used       free     shared    buffers     cached
Mem:          1024        994         29          0          0        841
-/+ buffers/cache:        152        871
Swap:         1024         18       1005
Total:        2048       1013       1034
[root@oki2a24 ~]#

スワップってなんでしょうか?でもメモリに余裕がありませんので、これ、良くないように思います。。。><

どうしましょう、オロロ><。。。

最近設定をいじりましたのは、確か MySQL でしたわね。まずは MySQL を容疑者として、調べました。

その過程は、大雑把に次のようになりましたの♪

  1. MySQL を診断してみる
    MySQL チューニングしたいです!★MySQLTuner をきっかけに♪ | oki2a24
  2. スワップとはなにか、勉強する
  3. そういえば、どのプロセスがメモリを多く使用しているのかしら?
  4. Apache の設定をメモリ使用量を減らす方向に見直します!

1.MySQLTuner で再び診断してみます♪

次のようにコマンドを打ち、診断いたしました。

# ダウンロード、解凍、実行場所に移動
wget https://github.com/rackerhacker/MySQLTuner-perl/archive/master.zip
unzip master
cd MySQLTuner-perl-master/
# 診断実行
perl mysqltuner.pl

パフォーマンス部分を見ましても、問題はなさそうです。

-------- Performance Metrics -------------------------------------------------
[--] Up for: 2d 6h 7m 31s (1M q [7.811 qps], 17K conn, TX: 7B, RX: 209M)
[--] Reads / Writes: 98% / 2%
[--] Total buffers: 272.0M global + 1.2M per thread (256 max threads)
[OK] Maximum possible memory usage: 576.0M (56% of installed RAM)
[OK] Slow queries: 0% (0/1M)
[OK] Highest usage of available connections: 3% (10/256)
[OK] Key buffer size / total MyISAM indexes: 16.0M/8.7M
[OK] Key buffer hit rate: 99.9% (1M cached / 1K reads)
[OK] Query cache efficiency: 85.2% (1M cached / 1M selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (6 temp sorts / 30K sorts)
[OK] Temporary tables created on disk: 5% (8K on disk / 174K total)
[OK] Thread cache hit rate: 99% (10 created / 17K connections)
[OK] Table cache hit rate: 22% (76 open / 333 opened)
[OK] Open file limit used: 2% (108/4K)
[OK] Table locks acquired immediately: 99% (147K immediate / 147K locks)

ただし、これは MySQL に限った話であって、サーバ全体を考えた時、これでは良くない、と考えるべきでしょう。

つまり結論として、サーバ全体のメモリ使用量をチューニングするのに、MySQLTuner は役に立たない場合がある、ということと考えます><。

2.メモリのスワップとは一体何なのかしら?

  • 実メモリが足りなくなった時に、ハードディスクを使ってメモリの代わりをさせる。
  • 実メモリの読み書きは高速だが、比較するとスワップ(ハードディスク)の読み書きは遅い。
  • スワップイン スワップ → 実メモリーに復元
  • スワップアウト 実メモリー → スワップに退避
  • ざっくり言って、スワップは使用されないようにした方がよい

このことは、次のページから読み取りました。ありがとう存じます。

また、次の情報も勉強になりました。

スワップが発生すると、サーバのスループットは極端に落ちてしまいます。サーバの調子が悪い場合に、メモリ不足でスワップが発生しているか否かが疑わしい場合は sar -W を利用すると、その時間にスワップが発生している / いたかどうかを確認することができます。

  • P186 [24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

やはり、スワップ発生よくない!><、とざっくり覚えておいてよさそうですわね。

2−1.sar -W でスワップが発生している / いたかどうかを確認!

スワップインも、スワップアウトも、時折発生しております!これを、ゼロにしたいですわね。。。

[root@oki2a24 ~]# sar -W
Linux 2.6.32-042stab079.5 (oki2a24.com) 	01/16/14

00:00:01     pswpin/s pswpout/s
00:10:01         0.00      0.00
…略…
05:20:01         3.71      8.71
…略…
20:30:02         0.68     14.92
…略…
Average:         0.13      0.32
[root@oki2a24 ~]#

3.そういえば、どのプロセスがメモリを多く使用しているのかしら?

WordPress 用途でサーバを使用しておりますので、Apache もしくは MySQL が最も多くメモリを消費していると予想できます。

それを、どうやって確認いたしましょうか?次のコマンドを使用します。

# すべてのプロセスを詳細に表示
ps auxw

得られる VSZ 、RSS に注目します。

  • VSZ そのプロセスが確保している仮想メモリ領域のサイズ。Virtual Set Size の略。
  • RSS そのプロセスが確保している物理メモリ領域のサイズ。Resident Set Size の略。

桁違いに大きいプロセスがございました。それらを抜き出します。

これらだけ、一桁大きい使用量でしたの。これから判断いたしますと、MySQL というよりも、Apache のプロセスが多く、各プロセスのメモリ使用量もかなり大きい、と言えますわね。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql     1035  0.1  7.2 180576 75928 ?        Sl   Jan14   4:11 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugi
root      1120  0.0  1.4 108480 15412 ?        Ss   Jan14   0:12 /usr/sbin/httpd
apache    5940  0.9  3.3 112856 34640 ?        S    22:07   0:29 /usr/sbin/httpd
apache    5982  0.9  3.4 116264 36592 ?        S    22:37   0:13 /usr/sbin/httpd
apache    5991  0.6  2.9 111420 30728 ?        S    22:42   0:07 /usr/sbin/httpd
apache    6000  0.6  2.9 111648 30876 ?        S    22:52   0:03 /usr/sbin/httpd
apache    6001  0.5  3.3 116480 35648 ?        S    22:53   0:02 /usr/sbin/httpd

と、いうことで、Apache の設定を見直すことといたします。

4.Apache の設定をメモリ使用量を減らす方向に見直します!

  • StartServers       8 → 10
  • MinSpareServers    5 → 5
  • MaxSpareServers   20 → 15
  • ServerLimit      256 → 256
  • MaxClients       256 → 40
  • MaxRequestsPerChild  4000 → 1000

上記のようにしました。今まで何度もお世話になった、次のページの設定です。

丁度、「1GBメモリ、2コア程度のサーバ(さくらのVPS 1Gプラン相当)でいつも行っている設定」とスペックが大体同じですのでありがたく採用させていただきました。

さて、その後、Apache と、ついでに MySQL も再起動しまして、しばらく待ちました。そしてパフォーマンスを計測です!

まあ!改善しましたわね♪

[root@oki2a24 ~]# free -mt
             total       used       free     shared    buffers     cached
Mem:          1024        852        171          0          0        756
-/+ buffers/cache:         95        928
Swap:         1024          5       1018
Total:        2048        857       1190
[root@oki2a24 ~]#

メモリです。

  • used 994 → 852 MB
  • free 29 → 171 MB

スワップです。

  • used 18 → 5 MB
  • free 1005 → 1018 MB

次に、プロセスの以前と同じ項目を見てみます♪

あら?。。。Apache のプロセスの各メモリ使用量が減るかと思っていたのですけれども、、、そんなことはございませんのね。。。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      7780  0.0  0.1   2516  1104 pts/0    S    21:58   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/
mysql     8229  0.1  1.0 175996 10548 pts/0    Sl   21:59   0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin
root      7671  0.0  1.6 108480 17740 ?        Ss   21:15   0:00 /usr/sbin/httpd
apache    7680  1.0  3.5 111688 36996 ?        S    21:17   0:28 /usr/sbin/httpd
apache    7720  0.8  3.5 116768 37308 ?        S    21:46   0:07 /usr/sbin/httpd
apache    7726  0.7  3.6 116308 37808 ?        S    21:52   0:04 /usr/sbin/httpd
apache    7733  1.3  3.3 113568 35284 ?        S    21:56   0:04 /usr/sbin/httpd
apache    8247  1.0  3.0 111528 31596 ?        S    22:00   0:00 /usr/sbin/httpd

立ち上がっておりますプロセス数は同じですので、もっと時間が経ちましたら最初の時のようなメモリ使用量となってしまいませんかしら?

うーん、わかりません!あとは Apache Bench などで計測してみて、メモリ使用量以外に実際のパフォーマンス比較してみると良いのでしょうね。

ですが今回はここまでとします!

おわりに

いまいちスッキリしませんの><。改善されたのか、されていないのか。。。

いままさに、ずっと htop コマンドでメモリ使用量を監視しておりますけれども、今のところ設定変更後に計測した値のままです。

このままずっと、少し余裕のあるような状態で過ぎてくださると嬉しいのですけれども。

以上です。

コメントを残す