タグ

ブックマーク / jrofbyr.hatenadiary.org (5)

  • こんにちは、アパッチ - Webと何かとその近所

    ついにモジュールの開発を始めちゃいます。 まずはApacheが立ち上がる事を確認しておきます。 OS Xの場合はシステム環境設定から共有を開き、パーソナルWeb共有を開始するとApacheが起動します。なぜか一般ユーザの権限で開始できます。 Apacheが起動できたら http://localhost/ を開いて動作を確認します。 あなたの予想に反して、このページが見えているでしょうか? 予想には反しておりません。 Apacheの動作が確認できたらモジュールの開発に取りかかります。まずはモジュールのひな形を作ります。ひな形の生成には、PHPのインストールなどでも度々お世話になるapxsコマンドを使用します。 適当なディレクトリに移動してからapxsコマンドを実行します。 $ apxs -g -n helloapache Creating [DIR] helloapache Creating

    こんにちは、アパッチ - Webと何かとその近所
  • PHPのセッション管理に使う箱選び 4 - Webと何かとその近所

    前回からの続き まとめ リクエスト/秒を同じグラフにしてみると、5000〜10000リクエスト(セッション)くらいまでは標準方式やmemcachedが速いけど、それ以上になるとInnoDBの方が高速なのがわかる。 最長待ち時間についても同じで、リクエストが少ない場合の差が無い分InnoDBの安定性が光る!ちなみに数値の差が大きいのでグラフは対数で表示(それでも突き抜けているのがあるけど)。 利用者が少なく、Webサーバが1台*1の場合は標準の方式で運用し、それ以上の規模になった場合はMySQLのInnoDB方式が良いという結論。今回はGCをPHP側で制御したけど、確率で動かすと色々と問題があるのでcronなどで定期実行した方が安心。その場合はMyISAMでも良いかも。 今回は財力の都合でテストしなかったNFSの場合、セッションファイルを保存するディレクトリに階層を作ってWebサーバ側のGC

    PHPのセッション管理に使う箱選び 4 - Webと何かとその近所
  • PHPのセッション管理に使う箱選び 3 - Webと何かとその近所

    前回からの続き memcached 使用したmemcachedのバージョンは1.2.1。 クライアントにはPECLのmemcache 1.62を使用。設定は初期値のまま。 GCは1/100の設定だけど、処理自体はmemcached側に任せてPHP側では何もしない。 5000リクエストくらいまでは景気が良いけど、その後どんどん遅くなっている。 最長待ち時間を見ると10000リクエスト以上が明らかにおかしい。abの結果をよく見ると10000リクエスト以上では「Failed requests」が結構ある。 失敗したリクエストの割合を出してみると、3〜5%程度が失敗するみたいだ。ただ、まんべんなく失敗するのではなく失敗する期間というのが存在するようなので、割合を出しても意味は無いような気もする。 失敗した時、PHPは Can't connect to localhost:11211, Cannot

    PHPのセッション管理に使う箱選び 3 - Webと何かとその近所
  • PHPのセッション管理に使う箱選び 2 - Webと何かとその近所

    前回からの続き MySQL DBにはMySQL-5.0.27を採用。 MyISAMとInnoDBで比較してみる。MEMORY(HEAP)は試していない。MySQLサーバへはUNIXドメインソケットを使って接続し、毎回接続/切断を行うようにしてみた。GCは1/100のまま。 設定の問題もあるかもしれないけど、リクエスト数が増えるとMyISAMの場合は順調に遅くなってしまう。一方のInnoDBはかなり安定した性能。 MyISAMの場合、DELETEを実行する際にテーブルをロックしてしまうため、レコード数が多い状態で全件走査するDELETEが実行されると、長い時間他のクエリが待たされてしまうのが遅くなる原因ではないかと思う。 最長待ち時間もリクエスト/秒と同じ傾向になっている。ひとつのGCの処理が終わる前に別のGCが起動するという状態が繰り返され、どんどん待ち時間が長くなっているみたい。 設定な

    PHPのセッション管理に使う箱選び 2 - Webと何かとその近所
  • PHPのセッション管理に使う箱選び 1 - Webと何かとその近所

    PHPには元々セッション管理の機能が用意されているので、一般的な環境であれば組み込みの関数を呼ぶだけでセッション変数を介して値の保存と取得ができるようになる。 この機能は、内部的にはセッション変数の内容をシリアライズした文字列をファイルに保存し、次のリクエスト時にはファイルの内容をアンシリアライズし変数に展開する方法で実現されている。ファイルはsession.save_pathで設定されたディレクトリ*1下にセッションIDを元にした名前で作られる。 また、セッションが開始される時、session.gc_probability / session.gc_divisorの確率でGCが起動しsession.gc_maxlifetime秒前から更新されていないセッションのファイルが削除され、古いセッションは無効になる。 以上は初期設定でPHPのセッション管理機能を使った場合の動作なのだけど、この方

    PHPのセッション管理に使う箱選び 1 - Webと何かとその近所
  • 1