2012/03/18

福岡インフラ勉強会第一回報告〜トラブル自慢、受験前対策〜

 福岡インフラ勉強会がAIP Cafeで行われました!http://atnd.org/events/26166



■私のトラブル自慢

ほとんどオフレコなので書けません。。
  • サーバー監視はなるべく常時行うようにする(特定の時間のみの確認だと、それ以外の時に問題が一時的に起こっても知りようが無い->問題を見逃してしまう可能性あり)
  • トラブルは人が起こす
  • 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かもしれない!?
なぜEC-Cubeかというと、
  • ある程度知られているOSSである
  • PHPである
  • チューニングし甲斐がありそう
  • ビジネスでもよく使われている
EC-CubeではなくてもPHPで作られたOSSは他にもあります。
  • openPNE
  • Magento
  • Xoops
  • Pukiwiki
とかでしょうか?

PHP以外ではRubyか?Pythonか?と思ったのですが、次もPHPではないかと思います。なぜかというと
Ruby
  • 思いつくOSSがRedmineぐらいしかない  http://www.opensourcerails.com/
  • Ruby用のHTTPDが沢山ありすぎて、Rubyを使っている人に有利になってしまう可能性がある
  • Railsはライブラリ扱いなのか?(逆にPHPはFWを使って作った有名なOSSがあまりない気がする)
    • ライブラリだった場合、設定変更や、カスタムが可能なのか?
    • テンプレートエンジンも変更出来るのか?
Python
  • 思いつくOSSがTracぐらいしかない
  • 使っている人が圧倒的に少ない
Perl使いが、最近PerlもJava側な感じになってきているので今更Perlはねーという事だったので、Perlは対象外としました。Javaもあまり高速しようがないのでは?という意見多数。

それでは高速化について調べてみましょう!

■言語周りの高速化

□PHP

  1. コンパイルし直してみる
    http://www.php.net/manual/ja/install.unix.php 
    1. オプションも吟味する
      http://www.php.net/manual/ja/configure.about.php 
    2. FastCGIモード(Lighttpd と実績あり)
      http://php.net/manual/ja/install.fpm.php 
  2. バージョンを変更する
    Amazon Linux AMI 2011.9で入っているPHPのバージョンはphp-5.3.6です。
    PHPの最新は2012/3/1に出たPHP5.4.0です。
    http://php.net/ChangeLog-5.php
    入れ替えるというのも手です。
  3. ネイティブコンパイラを使ってみる
    1. phc
    2. Roadsend
    3. HipHop for PHP
  4. アクセラレーターを使う
    http://en.wikipedia.org/wiki/List_of_PHP_accelerators 
    1. APC
    2. eAccelerator :開発が終わっているR.I.P.
    3. XCache 
    4. Zend Optimizer 
    5. PHP Accelerator
    6. 参考
  5. 設定周り(php.ini)
    http://phplens.com/lens/php-book/optimizing-debugging-php.php
  6. 参考URL

□Apache

  1. バージョン確認、可能ならば入れ替え等
    最新バージョンは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系バージョンが早い
  2. コンパイルし直してみる
    http://httpd.apache.org/docs/2.4/install.html
    1. またオプションも吟味する
      http://httpd.apache.org/docs/2.4/programs/configure.html
      不要ならば削除、高速化しようなら追加等
    2. モードも確認
      worker / prefork - PHPはprefork推奨
  3. 設定ファイル確認
    1. 同時接続数を増やす (MaxKeepAliveRequests)
    2. KeepAliveはonに
    3. DNSの逆引き停止
      HostnameLookups off
    4. ログ系設定
      ログをなるべく吐かない設定にする
      1. LogLevel
      2. ErrorLog(出力先を/dev/nullにするとか)
  4. モジュール
    http://httpd.apache.org/docs/2.4/mod/
    1. キャッシュ化するモジュール
      1. mod_cache(アクセス制限を無視するので要注意)
      2. mod_cache_disk
      3. mod_cache_file(使用要注意)
    2. キャッシュを取り扱うモジュール
      1. ETags
      2. mod_expires
    3. プロキシ系モジュール
      1. mod_proxy
      2. mod_proxy_balance
      3. mod_proxy_connect
      4. mod_proxy_express
      5. mod_proxy_fcgi
      6. mod_proxy_fdpass
      7. mod_proxy_html
      8. mod_proxy_http
      9. mod_proxy_scgi
    4. 圧縮系モジュール
      1. mod_deflate クライアントへ送られる前にコンテンツを圧縮する 
      2. mod_pagespeed (CSSやJSなど不要な改行、スペースを取り除く)
    5. 参考URL
      1. Apache高速化計画
      2. 最終回 Apacheパフォーマンス・チューニングの実践 , 2ページ目

□Ngix

http://nginx.org/ja/
※高速なNgixではあるが、モジュールに関してはApacheの方が充実しているので、そちらでしのぐ方法もある
参考URL
  1. Tips for nginx

□DB

DBはMySQLじゃないかなーと思います。何故かというとPostgreSQLはAWSでは提供されておらず、またOracleのライセンスを負担するほどでもないと思うからです。Oracleがスポンサーだったらまた違ってくると思うけど (・∀・)ニヤニヤ
  1. バージョン確認、可能ならば入れ替え等
    1. MySQL5.1系(5.1.61)
    2. MySQL5.5系(5.5.21)
    3. MySQL5.6系(5.6.4
  2. コンパイルし直してみる
    http://dev.mysql.com/doc/refman/5.1/ja/quick-install.html
  3. 設定ファイル確認
    1. 参考URL >>  MySQLを高速化したいときのチューニング方法
    2. スレッド数、同時接続数 
    3. スロークエリログなどをみながら
    4. メモリ周りや、バッファ
    5. キャッシュ
  4. Index作成、削除
  5. MySQL Proxy
    https://launchpad.net/mysql-proxy
    静的/動的を分離させるなど
  6. コネクションプール:遅そうなので却下
    SQL Relay で PHP + MySQL コネクションプーリング
  7. 参考URL
    1. MySQLを高速化したいときのチューニング方法
    2. MySQLを高速化する10の方法(漢のコンピュータ道はとりあえず一通り見ておく) 

□OS

  1. iptablesを使って使用するポートを限定する
    1. iptableの設定-CENTOSでアリソンサーバ
  2.  参考URL
    1. CentOSをたったの3ステップで高速化する方法
    2. さくら VPS + CentOS のチューニングや高速化もっとこうすれば良かった作業まとめ

□計測ツール

アドオン
コマンド
アプリ

□思いついた事

書き込み速度を重要視する場合は、Master DBのカラムには書き込まない。出力するバイナリーログは正常なのでslave側は正しいデータが入っている
MySQLとMariaDBは互換はある程度ありそう。。だけどあまり得策ではなさそうだ。。http://kb.askmonty.org/en/mariadb-versus-mysql
条件が分からないので、ファイルシステムを変えてもよいのか、とかサーバ側はどこまで手を入れてよいのか分からず一時暴走w

こちらも参考になりました

□まとめ

福岡熱い! チューニンガソンに関わらず非常に勉強になる会でした〜!
福岡インフラ勉強会が気になる方はFacebook Groupに今すぐ参加!
https://www.facebook.com/groups/100825430047874/


追記:チューニングソンと書いていたので、チューニンガソンに変更
edはviの親ではないらしい