■私のトラブル自慢
ほとんどオフレコなので書けません。。- サーバー監視はなるべく常時行うようにする(特定の時間のみの確認だと、それ以外の時に問題が一時的に起こっても知りようが無い->問題を見逃してしまう可能性あり)
- トラブルは人が起こす
- KVMとLVMで仮想環境を構築(改) 【ゲストマシン拡張編】
- ReiserFSもう止めたい;;
- edというエディタを知った
(viの親みたいなものらしい)
トラブル自慢はあんなことやこんな事まで出て来て、それに対しての対策方法なども一緒に協議されました。
■チューニンガソン対策
チューニンガソンがリモート参加OKになったので、その対策を話し合いました。第3弾!いろいろチューニングしてパフォーマンスを競うバトルイベント「チューニンガソン」3月24日(土) 開催! #tuningathon
現在出ている条件
- 当日渡された環境を使い、OSやサーバ周りのチューニングでパフォーマンスを競う
- サーバ環境がAWS(EC2)でOSはAmazon Linux AMI
(現在の最新はAmazon Linux AMI 2011.09 ) - チューニング対象はwebアプリ
- webアプリ自体の改変は対象外
- 第一回目はWordPress(PHP,書き込み速度)
- 第二回目はMediaWiki(PHP,読み込み速度)
- 第三回目はEC-Cubeかもしれない!?
- ある程度知られているOSSである
- PHPである
- チューニングし甲斐がありそう
- ビジネスでもよく使われている
- openPNE
- Magento
- Xoops
- Pukiwiki
PHP以外ではRubyか?Pythonか?と思ったのですが、次もPHPではないかと思います。なぜかというと
Ruby
- 思いつくOSSがRedmineぐらいしかない http://www.opensourcerails.com/
- Ruby用のHTTPDが沢山ありすぎて、Rubyを使っている人に有利になってしまう可能性がある
- Railsはライブラリ扱いなのか?(逆にPHPはFWを使って作った有名なOSSがあまりない気がする)
- ライブラリだった場合、設定変更や、カスタムが可能なのか?
- テンプレートエンジンも変更出来るのか?
- 思いつくOSSがTracぐらいしかない
- 使っている人が圧倒的に少ない
それでは高速化について調べてみましょう!
■言語周りの高速化
□PHP
- コンパイルし直してみる
http://www.php.net/manual/ja/install.unix.php - オプションも吟味する
http://www.php.net/manual/ja/configure.about.php - FastCGIモード(Lighttpd と実績あり)
http://php.net/manual/ja/install.fpm.php - バージョンを変更する
Amazon Linux AMI 2011.9で入っているPHPのバージョンはphp-5.3.6です。
PHPの最新は2012/3/1に出たPHP5.4.0です。
http://php.net/ChangeLog-5.php
入れ替えるというのも手です。 - ネイティブコンパイラを使ってみる
- アクセラレーターを使う
http://en.wikipedia.org/wiki/List_of_PHP_accelerators - APC
- eAccelerator :開発が終わっているR.I.P.
- XCache
- Zend Optimizer
- PHP Accelerator
- 参考
- PHPアクセラレータで一番高速なのはどれか?
- PHP高速化の手法について(2011/5)
- インストール方法を予め読んでおくとよいかも。。
- 設定周り(php.ini)
http://phplens.com/lens/php-book/optimizing-debugging-php.php - 参考URL
□Apache
- バージョン確認、可能ならば入れ替え等
最新バージョンはApache 2.4.1
http://www.apache.org/dist/httpd/Announcement2.4.html
http://httpd.apache.org/docs/2.4/new_features_2_4.html
2.4系バージョンが早い - コンパイルし直してみる
http://httpd.apache.org/docs/2.4/install.html - またオプションも吟味する
http://httpd.apache.org/docs/2.4/programs/configure.html
不要ならば削除、高速化しようなら追加等 - モードも確認
worker / prefork - PHPはprefork推奨 - 設定ファイル確認
- 同時接続数を増やす (MaxKeepAliveRequests)
- KeepAliveはonに
- DNSの逆引き停止
HostnameLookups off - ログ系設定
ログをなるべく吐かない設定にする - モジュール
http://httpd.apache.org/docs/2.4/mod/ - キャッシュ化するモジュール
- mod_cache(アクセス制限を無視するので要注意)
- mod_cache_disk
- mod_cache_file(使用要注意)
- キャッシュを取り扱うモジュール
- プロキシ系モジュール
- mod_proxy
- mod_proxy_balance
- mod_proxy_connect
- mod_proxy_express
- mod_proxy_fcgi
- mod_proxy_fdpass
- mod_proxy_html
- mod_proxy_http
- mod_proxy_scgi
- 圧縮系モジュール
- mod_deflate クライアントへ送られる前にコンテンツを圧縮する
- mod_pagespeed (CSSやJSなど不要な改行、スペースを取り除く)
- 参考URL
□Ngix
http://nginx.org/ja/※高速なNgixではあるが、モジュールに関してはApacheの方が充実しているので、そちらでしのぐ方法もある
参考URL
□DB
DBはMySQLじゃないかなーと思います。何故かというとPostgreSQLはAWSでは提供されておらず、またOracleのライセンスを負担するほどでもないと思うからです。Oracleがスポンサーだったらまた違ってくると思うけど (・∀・)ニヤニヤ- バージョン確認、可能ならば入れ替え等
- コンパイルし直してみる
http://dev.mysql.com/doc/refman/5.1/ja/quick-install.html - 設定ファイル確認
- 参考URL >> MySQLを高速化したいときのチューニング方法
- スレッド数、同時接続数
- スロークエリログなどをみながら
- メモリ周りや、バッファ
- キャッシュ
- Index作成、削除
- MySQL Proxy
https://launchpad.net/mysql-proxy
静的/動的を分離させるなど - コネクションプール:遅そうなので却下
SQL Relay で PHP + MySQL コネクションプーリング - 参考URL
- MySQLを高速化したいときのチューニング方法
- MySQLを高速化する10の方法(漢のコンピュータ道はとりあえず一通り見ておく)
□OS
- iptablesを使って使用するポートを限定する
- 参考URL
□計測ツール
アドオンコマンド
- top / sar / free / vmstat / iostat / perfstat / mpstat / pmap
- netstat / ss / iptraf / strace / gdb / ps / w / tcpdump
- http://www.cyberciti.biz/faq/linux-performance-tools-to-troubleshoot-problem/
□思いついた事
書き込み速度を重要視する場合は、Master DBのカラムには書き込まない。出力するバイナリーログは正常なのでslave側は正しいデータが入っているMySQLとMariaDBは互換はある程度ありそう。。だけどあまり得策ではなさそうだ。。http://kb.askmonty.org/en/mariadb-versus-mysql
条件が分からないので、ファイルシステムを変えてもよいのか、とかサーバ側はどこまで手を入れてよいのか分からず一時暴走w
こちらも参考になりました
□まとめ
福岡熱い! チューニンガソンに関わらず非常に勉強になる会でした〜!福岡インフラ勉強会が気になる方はFacebook Groupに今すぐ参加!
https://www.facebook.com/groups/100825430047874/
追記:チューニングソンと書いていたので、チューニンガソンに変更
edはviの親ではないらしい