タグ

ブックマーク / kzk9.net (17)

  • 常駐型サーバープログラムのデバッグ手法

    BOOK: WEB+DB Press TITLE: 常駐型サーバーのデバッグ手法(ドラフト版) AUTHOR: (株)プリファードインフラストラクチャー 太田一樹 *注: この文章はWEB+DB PRESS Vol.48に掲載された記事のドラフト版です はじめに 今回はデバッグ関連特集ということで、常駐型サーバープログラムを作成する際のハマりどころやそれに対する解析方法・解析ツール・対策を、実際の経験を交えながら紹介したいと思います。 筆者は(株)プリファードインフラストラクチャーでインメモリ分散検索エンジン「Sedue (セデュー)」を開発しています。モバイル向け検索エンジン「エフルート」や、2008/11/6にリニューアルされました「はてなブックマーク2」などの検索バックエンドとして使われております。 この検索エンジンはいくつかの常駐型サーバープログラムから構成されており

    mogwaing
    mogwaing 2009/04/07
    この本は色々参考になりました
  • 係り受け解析: まとめ - moratorium

    係り受け解析: まとめ 2007-06-12 (Tue) 10:24 IS TeXを頑張って覚えて最終レポートを書いたので、ここで晒す事にします。 MEによる日語係り受け解析 素性選択よりは色々な解析手法を試して精度向上したいなぁと思って作業していたのですが、限界が見えてきたので早めにまとめ上げました。 一緒に辻井研に行っているtmym氏がMEでLinear-time dependency analysis for Japanese [Sassano 04]の方式を試していて、面白い結果が出ているので期待。7500文/secって何ですか。 Similar Posts: 係り受け解析: 論文読み 係り受け解析: 実装 close(2) while select(2)ing Newer: 指きたっす Older: ESPer 2007 Comments:0 Comment Form N

  • Key-Value Store 勉強会を開催しました。 - moratorium

    Key-Value Store 勉強会を開催しました。 2009-02-26 (Thu) 3:08 勉強会 もう先週の金曜日になりますが、Key-Value Store勉強会というのを開きました。 既に素晴らしいまとめエントリが有りますので、詳細はこちらをご覧下さい。 Key-Value Store勉強会に行ってきました by katsumaさん Key-Value Store勉強会 by shudoさん はてなブックマーク「kvs」タグ UStream録画動画 by ichiiさん 日経BP社 中田さまには、草の根的勉強会にも関わらず、記事にして頂きました。有難うございます。 「キー・バリュー型データストア」開発者が大集合した夜 また、講師の方々に発表資料等をアップロードして頂いております。 末永さん: 全文検索エンジンgroongaをテストリリースしました 山田さん: About L

    mogwaing
    mogwaing 2009/02/26
  • moratorium | flock(2)はスレッドも排他するか?

    flock(2)はスレッドも排他するか? 以前人づてに、flock(2)がプロセス間排他はするけどスレッド間排他はしないという話を聞いた。 これが当だと、今まで自分が書いたマルチスレッドアプリケーションのファイルを扱う部分の根幹が揺らいでしまう。特にファイルが壊れたりするような現象は見られなかったので今まで放置してきたが、非常に心配になってきたので調べてみた。 実験環境と検証用コードは以下の通り。 dylan% uname -a Linux dylan 2.6.17-10-generic #2 SMP Tue Dec 5 22:28:26 UTC 2006 i686 GNU/Linux dylan% gcc --version gcc (GCC) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5) Copyright (C) 2006

    mogwaing
    mogwaing 2008/12/11
    flockがthread safeかを検証してくれている。thread safe っぽい
  • moratorium | epoll(2)とselect(2)の計算量

    epoll(2)とselect(2)の計算量 研究室でid:yama6がepollとか言っていて、mixi Engineers' Blog さんの「Linux Programming、epollの話」を思い出した。 パフォーマンスの方はselect(2)とpoll(2)のtime complexityがO(n)に対しepollはO(1)と無視のできない性能の差を実現しています。 これこれ、書こうとして忘れてた。僕の理解だとepoll(2)はO(n)でselect(2)がO(n^2)です。この差はsignificantですよ! 例えば1万個のソケットを管理しているとします。で、ソケットが1個づつ順番に読み込み可能になるという最悪のシチュエーションを考えて見ます。select(2)だと10000 * 10000のループが回ります。epoll(2)だと10000 * 1回のループが回ります。 そ

  • 第16回オープンソーステクノロジー勉強会 - moratorium

    第16回オープンソーステクノロジー勉強会 2008-11-26 (Wed) 23:43 Hadoop | 勉強会 第16回GREE OSSテクノロジー勉強会でHadoopのお話をさせて頂きました。 第16回 オープンソーステクノロジー勉強会 第16回 オープンソーステクノロジー勉強会トラックバック一覧 前半は僕の方からMapReduceの簡単な紹介と実装。話を聞きに来られる方々の層が分かってなかったのですが、懇親会で話した方の様子を見てると、もうちょい進んだ内容でも良かったなと思いました・・・。 予め参加者のプロファイル(差し支えない範囲での所属や肩書き, ブログURL, などなど)を渡してもらえると発表者としては嬉しいかなとか思いました > いちーさん、ふじもとさん 後半はohkura先生によるblogeyeの構築事例の紹介。個人でMax 80台まで使ってデータ処理をするという衝撃的な

    mogwaing
    mogwaing 2008/11/27
  • C(++)言語: valgrindの使い方 (memcheck)

    (2-1) Memcheck: メモリエラーを検出する Memcheckが検出出来るエラーには以下のようなモノが有る。 メモリリーク 初期化されていない値の使用 freeされた領域へのアクセス mallocされた領域より後の領域へのアクセス 不正なスタック領域へのアクセス malloc/new/new []とfree/delete/delete []の対応の不一致 memcpyでsrcとdestの領域が被っている (2-1-1) Memcheck: メモリリーク static char *s; void leaking(void) { s = (char*)malloc(100); s[0] = 'a'; } int main(void) { leaking(); leaking(); leaking(); } ==29024== LEAK SUMMARY: ==29024== defin

  • Hadoop + Luceneで分散インデクシング - moratorium

    Hadoop + Luceneで分散インデクシング 2008-08-27 (Wed) 1:07 Hadoop Hadoop (0.17系) + Lucene (2.3系) で検索用インデックスを分散インデクシングするコードを公開してみます。HDDに眠らせてるのはちょっともったいない。 いきなりソースコード。 package net.kzk9; import java.io.*; import java.util.*; import org.apache.hadoop.conf.*; import org.apache.hadoop.fs.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; import org.apache.lucene.i

  • 「プロトコルバッファー」がオープンソース化 - moratorium

    「プロトコルバッファー」がオープンソース化 2008-07-08 (Tue) 7:19 Google OSS Googleで使用されているRPC/シリアライズフレームワーク「ProtocolBuffer」がオープンソース化されたらしい via @ohkuraさん ProtocolBuffers, our serialized structured data, released as Open Source プロトコルバッファー チュートリアル おーおーお、GoogleTestといい何かオープンソース化ラッシュですね。FacebookのThriftと比較してC++, Java, Pythonしかバインディングが無いので、PHPとかPerlとか使ってる場合はまだ移行できなさそう。 この2つは週末に時間とってじっくり調べてみようー。 追記: RPCの部分は無くて、シリアライズのところしかなかっ

  • moratorium | はてな合宿

    はてな合宿 6月の週末にはてなさんの京都オフィスにお邪魔して3日間の合宿を行いました。その時にnaoya, oxy, kzkチームで作った「はてブ関連エントリー機能」が今日公開されました。 関連エントリー機能のリリースについて はてなブックマークの関連エントリー機能開発、PFI さんとの合宿 by naoya はてなブックマークの関連エントリー機能開発 by oxy はてブ関連エントリ 技術解説 by nvaca 僕は主にoxyの作ったエンジン(reflexaに使われている奴)をThriftのマルチスレッドサーバー上に載せる仕事をしました。マルチスレッド周りでエンジンに数箇所バグが有ったのでそれを取り、負荷生成ツールを作ってCPUを完全に使い切る所まで持っていくことができました。今までシングルスレッドで動かしてたんですよねー。 エンジン自体は行列を圧縮したり、上手く探索を枝狩りしてたりと、

  • google-perftools(tcmalloc)の使い方 - moratorium

    google-perftools(tcmalloc)の使い方 2007-12-17 (Mon) 22:59 Google OSS PFIでは毎週1人適当な話題で発表しているのですが、この間「GooglePerfToolsの使い方」という軽いお題で発表した資料を公開してみます。メモリ周りの問題は大変ですよね…。 google-perftools - Fast, multi-threaded malloc() and nifty performance analysis tools 肥え続けるTomcatと胃を痛めるトラブルハッカー ローテクなメモリ使用量監視方法 特にC++で長期運用中のメモリリークに苦しんでおられる方には役立つかと思います。基的にドキュメントの日語訳ですが。SlideShareだとなぜか図がずれるので、元ファイルをこちらに置いておきます。 | View | Upload

    mogwaing
    mogwaing 2008/05/10
    google perftools
  • C言語: write(2)の正しい使い方

    Created: Kazuki Ohta, 2006/04/17 Last Update: Kazuki Ohta, 2006/06/14 学校の課題(OS演習)で、open, read, write, close等のシステムコールを使用した課題が出された。システムコールなので当然失敗する事が有り、エラーチェックを正しく行う必要が有るのだが、writeについてはweb上に有る資料も使い方を間違っているモノが多かった。僕も課題では間違えて再提出をくらってしまった。なので、ここにwriteシステムコールの正しい使い方を書き記しておく。 まずは $man 2 write の一部を抜粋してみる。 NAME write - write to a file descriptor SYNOPSIS #include ssize_t write(int fd, const void *buf, si

  • Thread Base MapReduce - moratorium

    Thread Base MapReduce 2007-01-09 (Tue) 0:29 Uncategorized 並列計算フレームワークを作っている人を見てたら自分もなんか作りたくなって来たので、スレッドベースでGoogleMapReduceを真似て見ました。1マシン用のMapReduceといった所ですかね。 以下にソースコードが有ります。適当に煮るなり焼くなりしてください。 ソースコード ワードカウントが以下のようなコードで記述できます。 [code] class WordCounter : public Mapper { public: virtual void Map(const MapInput& input) { string text = input.value(); istringstream iss(text); string word; while

  • C(++)言語: valgrindの使い方

    ubuntu% uname -a Linux ubuntu 2.6.12-10-386 #1 Sat Mar 11 16:13:17 UTC 2006 i686 GNU/Linux ubuntu% valgrind --version valgrind-3.0.1 (0) 目次 Valgrindに含まれるツール Memcheck: メモリエラーを検出する(default) Cachegrind: キャッシュミスを検出する Massif: ヒーププロファイラを使う まとめ valgrindの使い方とエラーメッセージを整理してみた。「valgrind --leak-check=full command」というコマンドラインをよく用いる。これによりメモリ周りのバグを検出出来る。 --tool=cachegrindではプログラム実行時のキャッシュミス率を測定する事が出来る。cg_annotateを

  • C言語: UNIX最速ファイルコピー

    Created: Kazuki Ohta, 2006/06/14 Last Update: Kazuki Ohta, 2006/06/14 「write(2)の正しい使い方」と同じく、OS演習でやった事の延長線の記事を書いてみる。お題は「UNIX上で大規模ファイルを最速でコピーする方法」だ。一般的に、UNIXでファイルをcopyする際には以下のような方法が有る。 read -> write read -> write with posix_fadvice mmap -> mmap -> memcpy -> fsync mmap -> mmap -> memcpy -> fsync with madvise mmap -> write mmap -> write with madvise read, write, mmap辺りは良いとして、posix_fadviseというシステムコールが有

    mogwaing
    mogwaing 2007/07/30
    ファイルコピーの色々な方法
  • C言語: 実行時間測定の方法

    C言語において実行時間を測定する為の方法はいくつかある。gettimeofday, clock, getrusage, timesを利用する方法である。ここではこれらの方法について検証してみる。これは2005/12/30時点での情報であり、古い亊が考えられるので注意して頂きたい。さらに、内容のほとんどはmanを移しただけなので、正確な情報を得るためにそれぞれの関数のmanを見ることを強く推奨する。 System: Linux 2.6.12 glibc: glibc 2.3.5-1ubuntu12 gettimeofdayを使用する方法 通常はこの関数を使用するのをお勧めする。 gettimeofdayはSVr4, BSD 4.3準拠である。返り値の型はsys/time.hに定義されるstruct timevalで有る。

  • libaio(Linuxの非同期I/Oライブラリ)の使い方 - moratorium

    libaio(Linuxの非同期I/Oライブラリ)の使い方 2007-06-05 (Tue) 4:53 Unix Linuxで非同期I/Oを行うためのライブラリ「libaio」の使い方を書いてみる事にする。少し昔の話になるが、lighttpdが使用し、スループットを80%も上げたらしい。 TOEFLに向けて転置ファイルについての論文(Inverted files for text search engine [moffat 06])でReading対策をしていたところ、意外とスニペット(検索にヒットした箇所の前後の文章)を作るところが時間がかかるという事を教えてもらったので、適当にそれを例題にしてみる。具体的には以下のようなコードを非同期I/Oを使用して速くなるかどうか見てみる。 for (unsigned int i = 0; i < files.size(); i++) { FILE*

    mogwaing
    mogwaing 2007/06/06
    linuxの非同期I/Oライブラリ
  • 1