タグ

ブックマーク / kazuhooku.hatenadiary.org (26)

  • LTSV のもうひとつのメリット、あるいは、プログラムでログを出力する際に気をつけるべきこと - kazuhoのメモ置き場

    Labeled Tab-separated Values (LTSV) がブームのようです。 LTSV については、ラベルをつけることで柔軟に拡張できるという点が、その特徴として取り上げられますが、もう一点、タブをセパレータに使うことでログのパースが簡単になった、という点を忘れるべきではないでしょう。 特に httpd のログは NCSA httpd という HTTP/0.9 時代のWebサーバのログフォーマットがベースに拡張されてきたため、以下のようにセパレータとして空白、[]、ダブルクォート ("")*1が混在するという、とても処理しづらいものになっていました。どれほど複雑かは「404 Blog Not Found:perl - Apache Combined Log を LTSV に」の実装を見れば明らかでしょう。 127.0.0.1 - - [08/Feb/2012:23:52:4

    LTSV のもうひとつのメリット、あるいは、プログラムでログを出力する際に気をつけるべきこと - kazuhoのメモ置き場
    hiro_y
    hiro_y 2013/02/09
  • JSX はなぜ「速い」のか - kazuhoのメモ置き場

    なぜ「速い」のか、について JSX 開発者の立場から。 たとえば、シューティングゲームで一番重たい処理は何か。言うまでもなく衝突判定。多数の弾や敵機の衝突判定を毎フレームごとに行う必要があり、この演算が重たい。 JSX に同梱されている web/example/shooting.jsx には衝突判定のコードが複数あるが、一番重たいのは Bullet#update 関数で、その処理は以下のようになっている*1。 for (var rockKey in st.rocks) { var rock = st.rocks[rockKey]; if (this.detectCollision(rock)) { if (rock.hp == 0) return false; inDisplay = false; if (--rock.hp == 0) { st.score = Math.min(st.s

    JSX はなぜ「速い」のか - kazuhoのメモ置き場
    hiro_y
    hiro_y 2012/06/06
    「JSXは、このような「人間が行うのは現実的には不可能な最適化」を自動的に行うことで、「JavaScriptよりも速い」プログラミング言語になっているのだ」
  • TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場

    Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる URL を hash を含まないものに読み替える仕組みを提唱している。例えば「www.example.com/ajax.html#!key=value」のサーチエンジン用URLは「www.example.com/ajax.html?_escaped_fragment_=key=value」になる。 TwitterやFacebookはこの仕様に従うことで、Ajax な UISEO を同時に実現している、というわけ。ということを調べたなう。 参照: Getting Started  | 

    TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場
    hiro_y
    hiro_y 2010/10/13
    TwitterやFacebookが#!を含むURLをAjaxで採用している理由。クロール可能になる。
  • Disk I/Oの使用率を監視するワンライナー - kazuhoのメモ置き場

    iostat -x の %util を監視してしきい値を超えたらアラートメール飛ばしたいなぁと思って crontab 書いた。こんな感じ。 */5 * * * * perl -wle 'my $s = `/usr/bin/iostat -xk /dev/sd[abc] 270 2 | tail -4`; print $s if $s =~ m{\s(?:[0-9]{3}|[5-9][0-9])\.[0-9]+$}m'ポイントは、 iostat の後ろから2つ目の引数がサンプリングを行う秒数 tail で デバイス数+1 することで、最後のサンプルを取り出す 正規表現で50%以上だった場合に標準出力に iostat の結果を出す=メール送信

    Disk I/Oの使用率を監視するワンライナー - kazuhoのメモ置き場
    hiro_y
    hiro_y 2010/09/17
    「iostat -x の %util を監視してしきい値を超えたらアラートメール飛ばしたいなぁと思って crontab 書いた」
  • 2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット) - kazuhoのメモ置き場

    HTTP の持続的接続の功罪について はじめに、HTTP の持続的接続 (keep-alive) のメリットについて。持続的接続を使うメリットは、以下の2点。 TCP 接続の確立にかかる時間の節約*1 TCP の接続と切断に必要な資源 (CPUとネットワーク) の節約 ウェブブラウザ〜データセンタ間の通信で、持続的接続を使う理由は、このうちの前者。特に太平洋を超えるようなケースだと、TCP 接続に0.2秒とかかかるので、メリットが大きい。 一方、持続的接続のデメリットは、 接続が切断されるまでの間、その接続を維持するためにコストがかかる (主としてメモリが無駄になる) という点になる。特に、1プロセス1コネクションを前提とするアーキテクチャ (例: mod_perl) だと、メモリの無駄使いが、とてもひどいことになる。 そこで、ブラウザからの接続を受ける HTTP サーバとアプリケーション

    2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット) - kazuhoのメモ置き場
    hiro_y
    hiro_y 2010/09/09
    「メリットは、時間 (レイテンシ) と、CPUおよびネットワーク資源の節約にある。だが、リバースプロキシとアプリケーションサーバは同一データセンタ内に配置するわけだから、レイテンシを気にする必要はない。」
  • Tritonn のホットバックアップ(とsync 3回伝説) - kazuhoのメモ置き場

    Tritonn のホットバックアップ環境を構築しようと思って調査。結論から言うと 漢(オトコ)のコンピュータ道: MySQLバックアップ頂上決戦!! LVMスナップショット vs InnoDB Hot Backup の「MyISAMをスナップショットでバックアップ」でよさそう。 確認したこととしては、 Tritonn の全文検索データは FLUSH TABLES しても fsync されない つまり sync (1) の呼び出しが必須 linux の場合 sync (1) は1回呼べば十分だと man に書いてある POSIX 的には何回呼んでも書き込みが完了してる保証はない ってあたり。実際に、FLUSH TABLES WITH READ LOCK して sync 3回呼んでから LVM snapshot とって、myisamchk と sennachk してみたけど、myisamchk

    Tritonn のホットバックアップ(とsync 3回伝説) - kazuhoのメモ置き場
    hiro_y
    hiro_y 2010/02/05
    Tritonnのバックアップについて。MyISAMのバックアップと同様、LVMのスナップショットとか。
  • めんどうなのでディスク容量監視をワンライナーでcrontabに書いた - kazuhoのメモ置き場

    15 3 * * * perl -wle 'my $s = `/bin/df -k`; print $s if $s =~ m{^/dev/.* (9[0-9]|100)\%}m'df に限らず、コマンドの結果を正規表現で比較して問題があったらprint、ってのはcrontabで監視する時の基的なイディオム要出典。もちろん、backquoteじゃなくてパイプで繋いでもいい。

    めんどうなのでディスク容量監視をワンライナーでcrontabに書いた - kazuhoのメモ置き場
    hiro_y
    hiro_y 2010/01/14
    ディスク容量監視のためのワンライナー。cronに仕込むとか。
  • linuxで httpd が使ってるメモリ総量を調べる話 - kazuhoのメモ置き場

    Perl等のLLでウェブアプリケーションサーバを書いていると、普通はマルチプロセスモデル (apache なら prefork とか) で運用することになると思う。で、それらがどれだけメモリを使っているか、っていうのはチューニングにおいて重要になってきたりする (んじゃないかと思う) けど、そもそもメモリの総使用量をどうやって測定するのか。 20:20追記: PSSを使ってワンライナーで測定するのが簡単 (コメント欄参照)。kosakiさんありがとうございます。 $ sudo perl -le 'for my $p (@ARGV) { open my $fh, "< /proc/$p/smaps" or die $!; map { /^Pss:\s*(\d+)/i and $s += $1 } <$fh> } print $s' `pgrep plackup` 914325以下は初回投稿時

    linuxで httpd が使ってるメモリ総量を調べる話 - kazuhoのメモ置き場
    hiro_y
    hiro_y 2009/12/30
    LinuxでApacheのメモリ使用総量を調査。
  • ウェブ業界の15年、これからの10年 (Re ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない) - kazuhoのメモ置き場

    先のエントリ (ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない) ではボトムアップに煽った書き方をしたけど、自分がトップダウンでどういうふうに捉えているかについて。以下、あくまでも私見です。 いわゆるネット業界は1990年代後半に始まってから15年くらいたったわけだけど、当初はマスメディア(静的コンテンツの配信)が業界の中心だったのが、パーソナライゼーションを経て、コミュニケーションツールへと変化してきた*1。 それにあわせて技術的な面でも分化が進み、今ではデータベースとアプリケーションサーバと httpd っていう三層構成が一般的になっている*2。 そもそも Apache って、モジュールをC言語で a-patchy に書いて動的コンテンツを作れるのが売りだったわけだけど、今じゃコモディティ化を通り越してレガシーソフトウェアの代表格。でもみんなあんまり困ってないの

    ウェブ業界の15年、これからの10年 (Re ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない) - kazuhoのメモ置き場
    hiro_y
    hiro_y 2009/12/28
    「焦点技術は、httpd → アプリケーションサーバ → データストア という風に変化してきている」「トレンドから外れたところは、ムーアの法則にさらされる」
  • ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場

    タイトルは煽り入ってますが。 仮に動的ページを生成するのにかかる時間が1秒、そのうちデータベースやmemcached等リモートサーバへの問い合わせ時間を除くいたCPUの処理時間が0.1秒とする。また、ピークのリクエスト処理量は、平均の2倍とする。 そうすると、クアッドコアのアプリケーションサーバで処理できるリクエストは、 4 core * 10 reqs/sec * 86,400 sec/day * 30 day/mon / 2 = 51,840,000 reqs/mon と、約5,000万PV/月を1台で捌けることになる。 CPUが動いている時間は全処理時間の10倍と仮定したわけだから、アプリケーションサーバの最大同時接続数は 4 core * 10 = 40 程度あればいいことになる。実際には、安全係数を2倍かけて 80 とか。リクエストの処理に必要なメモリ量を 100MB とすると、

    ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場
    hiro_y
    hiro_y 2009/12/28
    「約5,000万PV/月くらいのサイトまでなら、アプリケーションサーバ1台で捌ける、という机上の計算が成り立つ。」
  • 自作って得なのかなと思って計算してみた (自作サーバカンファレンス感想) - kazuhoのメモ置き場

    一昨日、自作サーバカンファレンスに参加してきました。とてもおもしろく色々刺激をうけました。はてなの田中さん楽天の方々始め、スピーカーの皆さんありがとうございました。ただ分からなかったのは、サーバを自作する必然性がどの程度あるのかな、という点でした。 確かに、発表者の方々が構築されているような、1CPU, 8GBメモリのような構成では、自作サーバには(少なくとも原価ベースでは)価格競争力があるようです。はてなさんは Core 2 Quad + 8GBメモリ + X25-M (SSD) で10万円という目安を提示してらっしゃいましたが、同等の構成をベンダーから購入するとなると、1.5〜2倍の価格になるのかな、と思います。例えばDELLのオンライン価格*1は以下のようになっています*2。 DELL PowerEdge R200 - \145,900- Xeon X3330 (2.66GHz, Q

    自作って得なのかなと思って計算してみた (自作サーバカンファレンス感想) - kazuhoのメモ置き場
    hiro_y
    hiro_y 2009/11/28
    「自作サーバを設計/維持するぶんのコストも考えると、よほど極端なワークロードを抱えていない限りは、ベンダーサーバでいいんじゃないかなぁ、という風に思いました。台数が少ない方が管理コスト安いし。」
  • (特にMyISAMを使っていた)ウェブ屋さんがInnoDBを使う場合の設定項目 - kazuhoのメモ置き場

    InnoDBはMyISAMと比較して安全(OSクラッシュや電源断が発生してもテーブルが壊れない)分、書き込みが遅い。データベース屋さんからすると、それは当然のことでMyISAMがおかしいんだ、ということになり、だからバッテリバックアップ機能のついたRAIDカードを使うんだ、という話になる。でも、MyISAMを使っているウェブ屋さんの現場では、場合によって多少データが消えてもかまわないから、安いハードウェアで大量のアクセスを捌きたい... って乖離があるんじゃないかなーと思ってる。 そのような場合には、my.cnf の innodb_flush_log_at_trx_commit パラメータを調整することで、MyISAMに比肩する書き込み速度を得ることができる(そのかわり、クラッシュや電源断の場合は、設定によって直近1秒以内の変更が失われる)。 他のパラメータも含めて書いておくと、データベー

    (特にMyISAMを使っていた)ウェブ屋さんがInnoDBを使う場合の設定項目 - kazuhoのメモ置き場
    hiro_y
    hiro_y 2009/10/29
    InnoDBの設定。
  • シングルマスタ/マルチスレーブ構成に興味がない理由 - kazuhoのメモ置き場

    システム全体で必要な書き込みパフォーマンスが、RDBMSノード1基の IOPS の W% の場合、シングルマスタ+スレーブn台構成のシステム全体のパフォーマンスは、 書き込みパフォーマンス: W 読み込みパフォーマンス: R=(1-w)*(n+1) になる。この n=R/(1-w)-1 って w が増加するとスレーブ増設のメリットが加速度的に失われていく点がイヤ。 例えば、システム全体で要求される書き込みパフォーマンスが W=0.3 で、読み込みパフォーマンスが 3 ならば、シングルマスタ/マルチスレーブ構成で必要なノード数は5台。マルチマスタ構成を採った場合でも理想値は4台なので、そう遜色があるわけではない。 しかし、仮に必要なパフォーマンスが2倍 (W=0.6, R=6) になると、必要ノード数はマルチマスタ構成での8台に対し、シングルマスタ/マルチスレーブ構成では16台と、一気にコス

    シングルマスタ/マルチスレーブ構成に興味がない理由 - kazuhoのメモ置き場
    hiro_y
    hiro_y 2009/08/10
    「結局、シングルマスタなのを短期間ごまかす以外の目的で使えないんじゃないかなー」「必要な読み込みパフォーマンスが書き込みの数十倍に及ぶような環境だと意味があるのかもしれないけど」
  • MySQL+Java でサーバサイドプリペアードステートメントを使うべきで「ない」理由 - kazuhoのメモ置き場

    useServerPrepStmtsのここの説明ではデフォルトがtrueになっているが、これは上述の通り嘘である。 (中略) そしてなぜfalseにされたかということの背景を察すると、trueにすることの弊害もありそうで、手放しでこれをtrueにすることを勧めることが少しはばかられる。 http://www.geminium.com/chiba_blog/2008/12/23/33/ 自分は Java 使ってないですが、MySQL の中の人が使うなって言ってます *1。その理由はメモリリークのような症状が出る可能性があるから。 So why are prepared statements a problem? Because users do not clean up/close unused prepared statements. Multiply the number of prep

    MySQL+Java でサーバサイドプリペアードステートメントを使うべきで「ない」理由 - kazuhoのメモ置き場
    hiro_y
    hiro_y 2008/12/24
    MySQLのサーバーでのプリペアドステートメントは実行プランをキャッシュしない。うれしくない…。
  • MySQL の filesort プチテクニック - kazuhoのメモ置き場

    MySQL のチューニング関連のドキュメントを読んでいると「ORDER BY を避けろ」と書いてあるけど、できない (or したくない) 場合もあるわけで。そういう時はソート用の表と表示用の表を分割し自己結合することで、高速化できることもあります。適当な例ですが、 mysql> SHOW CREATE TABLE testt\G *************************** 1. row *************************** Table: testt Create Table: CREATE TABLE `testt` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `priority` int(10) unsigned NOT NULL, `data` varchar(255) NOT NULL, PRIMAR

    MySQL の filesort プチテクニック - kazuhoのメモ置き場
    hiro_y
    hiro_y 2008/12/08
    「最小限の列のみで filesort を行った後に自己結合する方が2倍以上速かったり」
  • NanoA の View-Controller 実装 - kazuhoのメモ置き場

    簡潔な View-Controller モデル コンテナ指向 遅延ロードによる高速動作 てのが NanoA の特徴だと思うけど、View-Controller モデルの話。要点として、 PATH_INFO の利用による、ディスパッチテーブルレス設計 View と Controller が可換 てのは Shibuya.pm で話したけど、昨日、プラグインも Controller (あるいは View) として動作するようにした。というのは、たとえば OpenID に対応しようと思うと、API の追加と Controller の追加、の双方が必要が必要になるから。 一般論としても、プラグインと VC を区別すべき理由はないように思う。VC は共通クラス、プラグインは VC のサブクラス、でいいんじゃないか。

    NanoA の View-Controller 実装 - kazuhoのメモ置き場
    hiro_y
    hiro_y 2008/12/01
    「プラグインと VC を区別すべき理由はないように思う。VC は共通クラス、プラグインは VC のサブクラス、でいいんじゃないか。」
  • NanoA のセールスポイント - kazuhoのメモ置き場

    初心者や小規模アプリケーションむけ 1コントローラ1ファイル ディスパッチテーブルレス PHP のような、テンプレート中心のコーディングも可能 CGI での速度遅延が少ない 遅延ロードを駆使 テンプレートをコンパイルしてキャッシュ 実行時に必要なコントローラーしか読み込まないので、アプリケーションの規模が増大しても速度低下が少ない OO なデザイン Perl プログラマを育てる アプリケーションコンテナ指向 アプリ毎に設定方式が違ったり、毎回設定したりするのはつらい NanoA は、設定インターフェイスを全アプリケーションで共有 DB の URI や設定データベース等 データベース管理と設定機能は、NanoA のデフォルトアプリケーションの一つとして提供したい アプリケーションの配布チャンネルとしても利用できるかも

    NanoA のセールスポイント - kazuhoのメモ置き場
    hiro_y
    hiro_y 2008/11/22
    NanoAのコンセプト。1コントローラ1ファイル、ディスパッチテーブルレス。
  • MyISAM と InnoDB の SELECT パフォーマンスの話 - kazuhoのメモ置き場

    InnoDB は MVCC で遅そうだから読み込み主体の場合は MyISAM とか言うけど、そういう発想の人はそもそも MVCC 不要=複雑なクエリを書かない人なわけで、で、永続的なハッシュとしてしか MySQL を使わないようなケースでは、どのみちプロセス間通信がボトルネックになるので InnoDB でも MyISAM でもパフォーマンスは変わらないんじゃないかと思った。 以下は、250 万件のテーブルからランダムにプライマリキーを指定して読み込んだ場合のパフォーマンス (10万回)。 クエリ MyISAM InnoDB WHERE id=x 10.4秒 10.7秒 WHERE id>x LIMIT 10 19.8秒 18.1秒 環境は MySQL 5.1.28-rc。チューニングとしては、key_buffer_size, myisam_use_mmap, innodb_buffer_p

    MyISAM と InnoDB の SELECT パフォーマンスの話 - kazuhoのメモ置き場
    hiro_y
    hiro_y 2008/11/13
    「永続的なハッシュとしてしか MySQL を使わないようなケースでは、どのみちプロセス間通信がボトルネックになるので InnoDB でも MyISAM でもパフォーマンスは変わらないんじゃないかと思った。」
  • 軽量ウェブフレームワークで大切な3つのこと - id:kazuhookuのメモ置き場

    Perlの軽量ウェブアプリケーションフレームワーク最新事情 - とほほのN88-BASIC日記 関連で今日出た話。 index.cgi ではなく フレームワーク名.cgi にすべき DirectoryIndex を設定した .htaccess を一緒に配布すべき Japanize や AutoPagerize のような配布チャンネルが重要 いずれも、エンドユーザーに近い層をターゲットにしているとそういうことになるのかな、と。最後の項目に至ってはフレームワークはおろか言語非依存な話だったりするのですが。いずれにせよゼロサムゲームではないのです。今後に期待。 追記: NanoA のアプリケーションを、好きに書いて配布チャンネルに載せられるようにしました。というか、http://coderepos.org/share/browser/lang/perl/NanoA/trunk 以下に勝手にディレ

    軽量ウェブフレームワークで大切な3つのこと - id:kazuhookuのメモ置き場
    hiro_y
    hiro_y 2008/11/13
    どれも納得。「index.cgi ではなく フレームワーク名.cgi にすべき」「DirectoryIndex を設定した .htaccess を一緒に配布すべき」「Japanize や AutoPagerize のような配布チャンネルが重要」
  • NanoA というウェブアプリケーションフレームワークをかいてみた - id:kazuhookuのメモ置き場

    CGI というシーンにおける現状の Perl のウェブアプリケーションフレームワークの問題点とは 都度 perl のインタープリタインスタンスを起動するのでモジュールの読みこみ/コンパイルコストを無視できない bless の速度を無視できない といったあたりであると認識している。 http://d.hatena.ne.jp/tokuhirom/20081111/1226418572 自分は、Sledge も Catalyst も Mojo も Rails も boofy も使ったことがありませんが、別に必要なモジュールをロードしたり bless したりするのはしょうがないのかなと思います。ただ、 不要なコントローラ (+それに伴う多数のモジュール) までロードしている ということが一番の問題なのかなと思いました。というわけで作った。 CodeRepos の /lang/perl/NanoA

    NanoA というウェブアプリケーションフレームワークをかいてみた - id:kazuhookuのメモ置き場
    hiro_y
    hiro_y 2008/11/13
    Perlでシンプルフレームワーク。