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

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

{width="320" height="191"}

■私のトラブル自慢

ほとんどオフレコなので書けません。。

  • サーバー監視はなるべく常時行うようにする(特定の時間のみの確認だと、それ以外の時に問題が一時的に起こっても知りようが無い->問題を見逃してしまう可能性あり)
  • トラブルは人が起こす
  • 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

コンパイルし直してみる
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 

バージョンを変更する
Amazon Linux AMI 2011.9で入っているPHPのバージョンはphp-5.3.6です。
PHPの最新は2012/3/1に出たPHP5.4.0です。
http://php.net/ChangeLog-5.php
入れ替えるというのも手です。

ネイティブコンパイラを使ってみる

  1. phc
  2. Roadsend
  3. HipHop for PHP

アクセラレーターを使う
http://en.wikipedia.org/wiki/List_of_PHP_accelerators 

APC

eAccelerator :開発が終わっているR.I.P.

XCache 

Zend Optimizer 

PHP Accelerator

参考

設定周り(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

  1. またオプションも吟味する
    http://httpd.apache.org/docs/2.4/programs/configure.html
    不要ならば削除、高速化しようなら追加等
  2. モードも確認
    worker / prefork - PHPはprefork推奨

設定ファイル確認

同時接続数を増やす (MaxKeepAliveRequests)

KeepAliveはonに

DNSの逆引き停止
HostnameLookups off

ログ系設定
ログをなるべく吐かない設定にする

  1. LogLevel
  2. ErrorLog(出力先を/dev/nullにするとか)

モジュール
http://httpd.apache.org/docs/2.4/mod/

キャッシュ化するモジュール

  1. mod_cache(アクセス制限を無視するので要注意)
  2. mod_cache_disk
  3. mod_cache_file(使用要注意)

キャッシュを取り扱うモジュール

  1. ETags
  2. mod_expires

プロキシ系モジュール

  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

圧縮系モジュール

  1. mod_deflate クライアントへ送られる前にコンテンツを圧縮する 
  2. mod_pagespeed(CSSやJSなど不要な改行、スペースを取り除く)

参考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. MySQL5.1系(5.1.61)
  2. MySQL5.5系(5.5.21)
  3. MySQL5.6系(5.6.4

コンパイルし直してみる
http://dev.mysql.com/doc/refman/5.1/ja/quick-install.html

設定ファイル確認

  1. 参考URL >>  MySQLを高速化したいときのチューニング方法
  2. スレッド数、同時接続数 
  3. スロークエリログなどをみながら
  4. メモリ周りや、バッファ
  5. キャッシュ

Index作成、削除

MySQL Proxy
https://launchpad.net/mysql-proxy
静的/動的を分離させるなど

コネクションプール:遅そうなので却下
SQL Relay で PHP + MySQL コネクションプーリング

参考URL

  1. MySQLを高速化したいときのチューニング方法
  2. MySQLを高速化する10の方法(漢のコンピュータ道はとりあえず一通り見ておく) 

□OS

iptablesを使って使用するポートを限定する

  1. iptableの設定-CENTOSでアリソンサーバ

参考URL

  1. CentOSをたったの3ステップで高速化する方法
  2. さくら VPS + CentOS のチューニングや高速化もっとこうすれば良かった作業まとめ

□計測ツール

アドオン

コマンド

アプリ

□思いついた事

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

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

Websites On Speed

View more presentations from Tom Hughes-Croucher

□まとめ

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

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