投稿者名:TOKIDA

このサイトは備忘録であるとともにIT界隈の人に情報をお返し出来たら良いなぁという物です。

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

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

[InputOutput] 2011.11.13 今週のアプリ

今週も色々出ていまいた。無料版はなるべく使ってみたいなぁと思いながらもほんの少しだけ。最近は写真系のアプリが大量生産されているのですがなかなか手を付けられていません。今週は「辞書」と「Dypticフレーム」の日本だったかな。

よく利用しているのはあまり変わりがないのですが、4SになってよくiPhoneだけで文章を書くことが多くなりました。

DraftPad App
カテゴリ: 仕事効率化
価格: 無料

PostEver – 1日分のメモが1つのEvernoteノートに App
カテゴリ: ビジネス
価格: ¥600

この2つはお世話になった感じだな。

ブログとかで色々アプリが紹介されているんだけど「いい」というものだけで「いい」けど俺は使ってないよっていう感じの紹介が無いなぁと、逆に「いい」アプリでもなんか別のアプリのここが気に入っていて使っていないんや。みたいな意見も面白いかと思って削除したもの含めて今週触ったアプリを☆付した。(作者様すみません。。。)


指標
☆☆☆:消した
★☆☆:保留
★★☆:当面使ってみる
★★★:一軍レベル

アプリ 評価 コメント
Ping Analyzer – Graphical Network Ping App
カテゴリ: ユーティリティ
価格: ¥170
★☆☆ すでに170yenですね。無料ならいいかも知れませんが有料なら微妙です。サイトをブックマークできるので素早くPingが出来ます。AverageRTT, Max/MinRTT ,Jitter, PacketLoss, LineQuality が計測できる
辞書 App
カテゴリ: 辞書/辞典/その他
価格: 無料
★★★ 今週登場したこの辞書アプリはiOS5であれば必須のアプリですね。これだけ手軽に辞書が使えて無料ときたら入れるしか有りません。iOS5の辞書機能もサードベンダー使えるようになると面白いんですがね。
90 in 1 : APPZILLA! App
カテゴリ: ユーティリティ

価格: 無料
AppZilla 2 FREE! App
カテゴリ: ユーティリティ
価格: 無料

★★☆ 大量にユーティリティが収まっているアプリです。まぁなにかの役に立つかも知れないので一応置いておくに越したことはないかと思うアプリ。はまれば使いたいものが見つかるかも!
Dyptic フレーム FREE App
カテゴリ: 写真/ビデオ
価格: 無料
★★★ 今週一番のあたりだったかも知れない、写真のフレームに配置が出来るアプリ。無料でこのての加工が出来るものを知らなかったので良い感じです。サイズは1200×1200が最大でスクウェアになってしまうのが残念。それでも手軽に出来るのはいいことですね。こんな感じで飾れます
IMG_0849
Days Away App
カテゴリ: 仕事効率化
価格: ¥85
☆☆☆ 特定の日から幾日たったのか、幾日あるのかを表示してくれるアプリ。画面はシンプル。機能として「日」単位でしかできないのが残念な感じです。これも無料の時に購入した。この手のアプリを持っていない人にはいいかも知れません。
Orchestra To-do App
カテゴリ: 仕事効率化
価格: 無料
☆☆☆ グループで実施するTodoなのかな。あまり詳しくは使って見れていません。
LINE App
カテゴリ: ソーシャルネットワーキング
価格: 無料
★☆☆ まだ未使用
ヘアチェン Hair Change App
カテゴリ: エンターテインメント
価格: 無料
☆☆☆ ヘアごとに写真をとって重ねないといけないとか、、、面倒でした。
Cocktail Calendar (Free) App
カテゴリ: 仕事効率化
価格: 無料
☆☆☆ 案件ほど実際のアプリは可愛くない。他のアプリでも十分の機能。有料版ではまた違うのかも知れませんが

 

無料アプリも最新の値段を確認の上ご購入下さい。

ではまた来週!?

MuninでHTTPレスポンスを監視する

リソース監視をする

ServersManのVPSをUbuntuで借りているのですが、Muninという監視ツールでのリソースの監視をしています。他にも色々ツールはあるのですが特にCPUがどうなったといっても何もすることも無いのでグラフだけで十分なので利用しています。

なにもいじっていなかったのでHTTPのレスポンスを図るようにしました。

A Munin plugin to track http response times.

こちらにPython製のHTTPレスポンスを図るプラグインがあります。Githubからダウンロードしましょう。1

https://github.com/arthur-debert/munin-httpresponse-plugin/blob/master/httpresponsetime

 

Muninの導入ディレクトリにもよるかと思いますが

# ls -l httpresponsetime
-rwxr-xr-x 1 root root 3842 Nov 12 19:50 httpresponsetime

に配置します。
設定は /plugin-conf.d/munin-node に記載を行います。

[httpresponsetime]
env.urls http://roguer.info,http://roguer.info/nginx_status

こんな感じでサイトのURLを指定しています。反映させるには通常通り munin-node を再起動すれば良いです

# service munin-node restart

これでグラフが追加されます。

Http Response Times

しばらくこれでモニターをしてみたいと思います。

  1. 利用にあたって httplib2 が必要となりますので導入してない場合には導入しましょう。通常のPythonのライブラリ同様 #python setup.py installで導入ができます []

WordPress のバックアップをDropboxに保管する

WordPressのデータをバックアップ取得するのだが、サーバを以前変更した時からメールの設定を面倒でしておらずたまに手動でサーバから持ってきていた。面倒この上ない上に何のバックアップにも成っていない状況だったのでDropboxと連携するプラグインを入れて見ることにしました。

 

WordPress › WordPress Backup to Dropbox « WordPress Plugins

 

設定画面から「Backup to Dropbox」を選択します。
初回にはDropboxのアカウントのリンクを行いますので「Authorize」をクリックして設定を行いましょう。

image

 

認証が終わって許可すると設定ができるようになります。

image

設定は特に困ることは無いかと思います。時間と周期を選びましょう。
試しにバックアップを取得する場合には下にある「Backup now」を選択します。

順次Dropbox側にデータが直接送られているようです。

 

DBのデータ等はプラグインでメールで送ることともできますが日々送られてくる都合上データ領域が多くなってしまうのが微妙だったのでこちらのほうがいいかもしれません。何れにしても定期的には手動でもバックアップ取っておかないと不安なのでそれはそれでしたいと思う次第

 

さて、次は何をいじるかな?

RSSの情報をEvernoteに保存する( ifttt サービスを利用する)

Evernoteを無料プランに変更したのでメールアドレスからの登録が250通から50通になっていることを失念していました。今まで、色々なルートで保管したいものを全てEvernoteに「メールアドレス」で登録していましたのでちょっと支障が出てきそうです。

Evernoteのプレミアム会員と無料会員の機能の違いまとめ | ひとぅブログ

今までは、「Twitterへリンクをつぶやく」、リンクを「Packrati.us – Bookmark your Twitter links」で「Instapaper」に登録する、InstapaperのRSSを 「Full Text Feed」を経由して「http://blogtrottr.com」を経由してメールアドレス経由でEvernoteに登録している((何書いているんだってくらい?ですね)) 。というわけで解決するために「ifttt」を利用します。これはメールアドレスじゃなくてAPI経由1 と期待しています。また多機能なので一連の流れも整理です。

 

 

1.Twitterへ、リンク込のつぶやきを Instapaper に登録する

image

上のような設定を行うことで自動的にInstapaperに登録されます。これだけでも結構いい感じなのでおすすめです。((今までは Packrati.us を利用していました ))

 

2.Inatapaper のリンク内容を全文記事のRSSに変換する

これは今まで通りで Full Text Feedのサービスで登録します。http://fulltextrssfeed.com/www.instapaper.com/rss/263298/r0V1d5E5gGk9rIqSTd2Pf6EuuSY

 

3. RSSフィードをEvernoteに登録する

image

 

FullTextFeedが非常に更新が遅い気がするので微妙なんですが、しばらくこれで運用してみようかなと思います。快適に動くようであれば現在 Google+ からのTweetを「ManagedFilter」で行なっていますがこれも iftttt のレシピを参考に作ることが出来たりしますので移行をしていこうかと思います。

 

4. その他の設定(レシピから)

image

Instagramで取った写真をEvernoteへ入れます。但しNotesの中が <img src=””> で記載されるのはEvernote的には中に取り込まれないんですかね?だとするとInstagramのサービスが終った後には見れなくなるので嬉しくないかもですね。

image

コチラのレシピであればInstagramで取った写真をDropboxのフォルダに保管してくれます。凄い。。

  1. ほんとにAPI経由なのかわかっていませんが []
上部へスクロール