タグ

ブックマーク / dsas.blog.klab.org (15)

  • ログからは見えてこない高負荷サイトのボトルネック : DSAS開発者の部屋

    ちょうど1年前に「高負荷サイトのボトルネックを見つけるには」という記事を掲載していますが、この手のトラブルシューティングって結構大変で悩ましいですよね。はじめまして、新入りの@pandax381です。 ログからは見えてこないもの 「サイトの応答が遅い」という問題が発生した場合、その原因はどこにあるでしょうか。 Webアプリケーションの処理に時間が掛かっている DBサーバに投げたクエリーの応答が遅い サーバの処理能力を超えている などなど、いくつもの可能性があります。通常、上に挙げているような問題は、アプリケーションやサーバのログを調査することで、原因を突き止めることができます。 一方で、こういったログの調査だけでは、その原因にたどり着くことができなかったり、相当な苦労が伴うケースもあります。 あるサイトのある日の出来事 つい先日のことですが、KLabの運営している某ソーシャルゲームにて、サ

    ログからは見えてこない高負荷サイトのボトルネック : DSAS開発者の部屋
    sotarok
    sotarok 2012/07/07
  • 過負荷をかわす Apache の設定 : DSAS開発者の部屋

    KLab Advent Calendar 2011 「DSAS for Social を支える技術」の9日目です。 前回は php を動かしている Apache の手前にリバースプロキシを 置く必要性を解説しました。 今日は、 その前の php のプロセス数を絞る設定と合わせて、実際に Apache で 設定する方法を紹介します。 以降、 php を動かしている Apache の事をアプリサーバー、リバースプロキシ+ 静的ファイル配信を行っている Apache の事をプロキシサーバーと呼びます。 基設定 まずは基的な設定のおさらいです。 アプリサーバー 並列数を絞るには MaxClients を設定します。アプリがどれくらいの時間を CPUの処理で使って、どのくらいの時間を外部リソース待ちに使っているかにも よりますが、だいたいCPU数の1.5倍〜2倍くらいが適当だと思います。 Hyp

    過負荷をかわす Apache の設定 : DSAS開発者の部屋
  • Erlangとは何だったのか : DSAS開発者の部屋

    タイトルは釣りです。 methane です。 8/20(土)にLL Planetesに行ってきました。 今年は JavaScript 一色と言っていいほど、 JavaScript の存在が大きくなっており、 そのなかでも特に Node.js の話題が多かったように思います。 「Node.jsとはなんだったのか」というセッションでは主にコールバックチェーン型プログラミング vs 軽量スレッドを使った手続き型プログラミングの話題や各言語におけるライブラリなどが 紹介されていたのですが、以前個人的な興味でいくつかの言語とライブラリで echo server を実装していたので、他にも興味を持っておられる方のために公開します。 いろんな言語でEcho Server@github 参考に、簡単なベンチマーク結果も載せておきます。各言語・フレームワークで完全に同じものを 実装しているわけではないし、エ

    Erlangとは何だったのか : DSAS開発者の部屋
  • チューニンガソンで優勝してきました : DSAS開発者の部屋

    7/9(土)にチューニンガソン というイベントに参加して優勝してきたので、その報告と、何を考えてどんなチューニングをしたのかを 記憶の範囲で公開したいと思います。 今回のチューニンガソンのお題は、WordPress(ja) + php + Apache + MySQL で、 ab を使って wp-comment.php 経由でコメントのポストをすることで計測が行われました。 MySQLとApacheを立ち上げたらWordPressが動く環境が渡され、そのWordPress自体は設定ファイルを含めて 改造が一切禁止、WordPressの実行をショートカットするチートも禁止です。 0. 試合前日 環境がAWSとAMI Linuxということは事前に公開されていたため、前日にAWSに登録して少しだけAMI Linuxを 触ってみました。yumベースだけどCentOSと違って結構新しいバージョンが用

    チューニンガソンで優勝してきました : DSAS開発者の部屋
  • 高負荷サイトのボトルネックを見つけるには : DSAS開発者の部屋

    はじめに アクセスが急増すると、応答時間が著しく悪化するサイトはありませんか? 普段は200ミリ秒以内で安定してアクセスをさばいているのに、イベントやらキャンペーンやらを開始した瞬間から、普段の2倍や3倍のアクセスが殺到し、その結果、レスポンスタイムが3秒とか9秒とかかかるようになってしまうことってありますよね。 あるサイトの実状 つい先日まで、そんなサイトが私の目の前にもありました。自社で運営している某ソーシャル系のサイトなんですが、イベント開始時刻と同時にアクセス数が急増するのです。とはいえ、所詮は普段の2倍とか3倍程度の数なのだから、少なくとも1秒以内にレスポンスを返せるくらいの性能は維持したいものです。 しかし実際は困ったことに、応答に3秒以上もかかってしまう処理が大量に発生してしまう状況に陥ってしまっていました。これはきっと、どこかにボトルネックがあるに違いありません。 仮説を立

    高負荷サイトのボトルネックを見つけるには : DSAS開発者の部屋
  • 負荷試験ツール「インターネット破壊」を公開しました : DSAS開発者の部屋

    負荷試験ツール インターネット破壊を公開しました。 こちらはずっと社内で負荷試験に使用していたツールです。社内で使用していたものなので、ソーシャルアプリ向けの機能などが多少追加されていますが、もちろんんそれ以外のWebアプリケーションでも使用できます。 基的にはApache JMeterのようなWebアプリケーションむけのシナリオ負荷試験ツールです。コマンドラインオペレーションだけで実行でき、サーバー上で簡単に負荷試験を実施できるのが特徴です。POSTリクエストなどはもちろん、レスポンスのチェックやUserAgentの偽装、ランダムな値をパラメーターにセットする機能も実装しています。 注意: 当然ながら自分の管理下にないサイトに向けて負荷試験ツールを実行するのは絶対にやめてください。非常に危険です。 物騒な名前がついていますが、これは完全にわたしの小児的感性の趣味によるところです。地震で

    負荷試験ツール「インターネット破壊」を公開しました : DSAS開発者の部屋
    sotarok
    sotarok 2011/03/20
  • 非PHPerのためのPHP入門決定版 「パーフェクトPHP」 : DSAS開発者の部屋

    エキスパートPythonプログラミングの書評 を書いていただいたGREEのsotarokさんから、「パーフェクトPHP」を献していただきました。 ありがとうございます。 KLabでは多くのWebサイトをPHPで構築しているのですが、私はあまりWebアプリ開発には 関わっておらず、チューニングが必要な場面でだけプロファイル結果を見てチューニングしたり、 社内専用PHPエクステンションを書いたりしているだけで、しっかりとPHPの言語を勉強した ことはありませんでした。 array の実装は判っても、 array_* 関数とか全然覚えていません。 これを機に、ちゃんと言語としてのPHPを勉強することにしました。 まず、このはプログラミング初心者向けのではありません。関数やオブジェクト指向がなぜ 必要なのかなどのいわゆる入門者向けの話題はバッサリ切り捨てています。おかげで、すでに 他の言語で

    非PHPerのためのPHP入門決定版 「パーフェクトPHP」 : DSAS開発者の部屋
  • Pythonの内包表記はなぜ速い? : DSAS開発者の部屋

    「エキスパートPythonプログラミング」の発売が、Amazonや一部の書店で始まりました。 エキスパートPythonプログラミング 著者:Tarek Ziade 販売元:アスキー・メディアワークス 発売日:2010-05-28 クチコミを見る 今回は、「エキスパートPythonプログラミング」の2章から、リスト内包表記について補足します。 書で、リスト内方表記が速い理由について、次のような訳注を書きました。 訳注:リストに要素を append() する場合、インタプリタは「リストから append 属性を取り出してそれを関数として呼び出す」という処理をしなければなりません。 それに対して、リスト内包表記を使うと、インタプリタに直接「リストに要素を追加する」という処理をさせることができます。インタプリタが解釈する命令数が減る、属性の取り出しが不要になる、関数呼び出しが不要になる、という3

    Pythonの内包表記はなぜ速い? : DSAS開発者の部屋
  • PHP Extension を作ろう第3回 - クラスを作ろう : DSAS開発者の部屋

    今回は PHP Extension でクラスを実装する方法を紹介します。 クラスと言えばオブジェクト指向によるプログラミングに欠かせないシステムであり、PHP にももちろんこの仕組みが用意されていることはご存じかと思います。 クラスを実装するにあたり、インスタンス、プロパティ、メソッドなどと言ったキーワードが登場してきますが、これらをどの様にして PHP Extension で実装していくかを見ていきましょう。 最初は PHP4 と PHP5 での PHP Extension の実装方法の違いなども紹介していくつもりだったのですが、PHP4 と PHP5 でクラスに関する仕様が大きく変わっており PHP Extension の実装方法もまた大きく異なっていることを知りました。残念ながら今回は PHP5 での実装方法に限定させた頂きます。 クラス設計 まず最初に今回どの様なクラスを作成するか

    PHP Extension を作ろう第3回 - クラスを作ろう : DSAS開発者の部屋
  • PHP Extension を作ろう第2回 - 引数と返値 : DSAS開発者の部屋

    前回の Hello World のサンプルプログラムで一通りの PHP Extension の作成手順を見てきました。しかし helloworld() の様に引数も返値も無い関数だけではプログラミング言語として不便ですので今回は PHPPHP Extension におけるデータタイプの詳細と引数、返値の渡し方について見ていきましょう。 PHP のコードから C言語で書かれたコードへとデータをやり取りする上で「型」についての疑問が浮かび上がります。動的形付けされた PHP の変数を静的に形付けされた C言語で扱うにはどうしたらよいのでしょうか。 まずは、PHP 内部でのデータ表現を知るために PHP のソースを覗いて見ましょう。 php-x.x.x/Zend/zend.h より typedef union _zvalue_value { long lval; /* long value

    PHP Extension を作ろう第2回 - 引数と返値 : DSAS開発者の部屋
  • PHP Extension を作ろう第1回 - まずは Hello World : DSAS開発者の部屋

    PHP で汎用的なライブラリを作成するフレームワークには大きく分けて2種類あるようです。 ひとつは PEAR のように PHP でクラスライブラリを作る方法、もう一つが今回紹介する PECL の様に PHP 自体を拡張するモジュールを書く方法です。 なぜ PHP Extension ? ひとつは、過去に C で書かれた既存のライブラリを流用したい場合に PHP Extension を作成すれば自然に PHP のコードに結合することが出来ます。また、PEAR の様に PHP で書いたコードと比べると若干高速になります。 それでは実際に helloworld という名前の PHP Extension を作成してみましょう。PHP のソースを展開すると php-x.x.x/ext というディレクトリがありますので $ cd php-x.x.x/ext $ ./ext_skel --extname

    PHP Extension を作ろう第1回 - まずは Hello World : DSAS開発者の部屋
  • Erlang で memcached を作ってみました。 : DSAS開発者の部屋

    先日、こちらの Erlang の世界ではmemcachedとか要らない を興味深く読ませて頂きました。 たしかにクライアント側も Erlang で書かれている場合、例えばキャッシュサー バーにアクセスを行う WEB アプリケーションも Erlang で書かれていれば Erlang のプロセス間通信を使用することで簡単にキャッシュサーバを実装する ことが出来そうです。しかし、WEB アプリケーションなど、全てのシステムを Erlang で書くにはまだ私にとって勇気が要る事なので TCP/IP で memcache プ ロトコルを喋る Erlang 版 memcached を作ってみました。 その名も ememcached です。 % ememcached.erl -module(ememcached). -export([start/0, ememcached/1, process_comm

    Erlang で memcached を作ってみました。 : DSAS開発者の部屋
  • Jabberサーバーをクラスタリングしてみました。 : DSAS開発者の部屋

    みなさん Jabber をご存じですか? Jabber はオープンな仕様のメッセン ジャーサービスのことで最近だと Google Talk で使用している方が多いと思 います。 KLab では 2001年ぐらいから、誰でも Jabber を使うことが出来る Jabber.JP というサービスを運用してい ます。まだ Jabber を使用したことがない方は是非こちらの「Jabber をはじめよう」 を ご覧になって Jabber を使ってみて下さい。 Jabber.JP は jabberd という実装を使用してい たのですが、冗長構成が難しいという問題がありました。 そこで先日、Jabber.JP では大規 模なメンテナンスを行い ejabberd という実装で分散、冗長化を行ってみました。ejabberd はその名の通り、Erlang で 実装された Jabber サーバーで、Mnesia

    Jabberサーバーをクラスタリングしてみました。 : DSAS開発者の部屋
  • Erlang Webフレームワークでデータベースを分散させる : DSAS開発者の部屋

    ErlangのWebフレームワークであるErlyWebの紹介と、Windowsにインストールする手順を紹介

    Erlang Webフレームワークでデータベースを分散させる : DSAS開発者の部屋
    sotarok
    sotarok 2008/04/17
    ErlangのWebフレームワークであるErlyWebの 紹介.まとめあり
  • repcached-2.0リリースのお知らせと、超簡単なサンプルコード : DSAS開発者の部屋

    repcached-2.0(memcached-1.2.5ベース) をリリースしましたのでお知らせします。 http://lab.klab.org/modules/mediawiki/index.php/Repcached (日語) http://repcached.lab.klab.org/ (英語) 今回の目玉はマルチマスタ構成のサポートです。 以前のバージョンはマスタ/スレーブ構成だったので、必ずマスタへ書き込まなければいけませんでした。そのため、接続先のサーバがマスタなのかどうかをクライアントが判別しなければいけなかったり、keepalivedなどと併用するなどの工夫が必要でしたが、今回のバージョンではその必要がなくなります。両方のサーバに対してデータを書き込むことができるようになったので、かなり使いやすくなったと感じています。 repcachedはパフォーマンスを最重視している

    repcached-2.0リリースのお知らせと、超簡単なサンプルコード : DSAS開発者の部屋
    sotarok
    sotarok 2008/04/17
    あとでチェック
  • 1