Home > Archives > 2008-10
2008-10
Thrift: TThreadPoolServer
- 2008-10-29 (Wed)
- Thrift

Thrift (ver. 20080411p1)のTThreadPoolServerがバグっている件。
過負荷時に、処理が追い付いていないにも関わらずaccept(2)し続け、ファイルディスクリプタを食いつぶす。
対処するには、まず以下のようにthreadManagerを作る際にタスクキューサイズの上限を設定する。ここでは128。
shared_ptr<ThreadManager> threadManager(ThreadManager::newSimpleThreadManager(20, 128));
次に以下のパッチを当てる。
これで安定稼働する模様。 thanks to id:tkng and id:nvaca
ってか次のstableいつでるんだよー!
- Comments: 0
- Trackbacks: 0
copybench
- 2008-10-17 (Fri)
- Uncategorized

おおお、これはすっげー嬉しい!ありがとうございます!
第2段のParallel I/O Benchも作らないと。普通に同じファイルに書くと、当然i_mutexが刺さってベンチマークにならないので、上手い落とし所ないかな → メジャーどころのDBとかがどう書いてるかっていうのを見て書けばいいんだな。という所で停止中w
頑張る。
# そういえばCodeZineの件で1~2ヶ月ぐらい前にメール送ったんですけど、届いてなさげですかね?blogの左に載ってるアドレスに送ったのですけれど・・・ > kosaki先生
- Comments: 1
- Trackbacks: 0
Googleのロギングライブラリgoogle-glogを使ってみる
- 2008-10-15 (Wed)
- Google OSS

“google glog”で探せないgoogle-glogを軽く使ってみました。Googleからオープンソースで公開されたC++向けのロギングライブラリです。以下のエントリが参考になります。
google-gflags 1.0と、google-glog 0.1をダウンロードしてインストールします。今回はgoogle-gflagsを使用する場合についてのみ記述します。また、glogのマニュアルに一通り目を通してから読まれると良いかと思います。
まずはとにかく動かしてみます。
#include
int
main(int argc, char **argv)
{
google::InitGoogleLogging(argv[0]);
google::ParseCommandLineFlags(&argc, &argv, true);
LOG(INFO) << "INFO";
LOG(WARNING) << "WARNING";
LOG(ERROR) << "ERROR";
LOG(FATAL) << "FATAL";
}
これをコンパイル & 実行。
pficore% g++ glog.cpp -lglog -lpthread -lgflags; ./a.out E1015 131626 glog.cpp:9] ERROR F1015 131626 glog.cpp:10] FATAL @ 0x2abe222d5ca7 google::LogMessage::SendToLog() @ 0x2abe222d2017 google::LogMessage::Flush() @ 0x2abe222d2216 google::LogMessageFatal::~LogMessageFatal() @ 0x400bb8 main @ 0x2abe230d68e4 (unknown) @ 0x4009c9 (unknown)
デフォルトではERROR以上のレベルが標準出力に吐かれます。また、FATALを吐くと自動的にバックトレースを出力してくれます。
次はファイルに書き出してみます。これには-log_dirオプションを指定します(オプション一覧は./a.out –helpで見ることができます)。
pficore% ./a.out -log_dir=. E1015 131953 glog.cpp:9] ERROR F1015 131953 glog.cpp:10] FATAL @ 0x2b685d158ca7 google::LogMessage::SendToLog() @ 0x2b685d155017 google::LogMessage::Flush() @ 0x2b685d155216 google::LogMessageFatal::~LogMessageFatal() @ 0x400bb8 main @ 0x2b685df598e4 (unknown) @ 0x4009c9 (unknown) pficore% ls a.out a.out.INFO a.out.pficore.dyndns.org.kzk.log.FATAL.20081015-131953.7491 glog.cpp a.out.ERROR a.out.WARNING a.out.pficore.dyndns.org.kzk.log.INFO.20081015-131953.7491 a.out.FATAL a.out.pficore.dyndns.org.kzk.log.ERROR.20081015-131953.7491 a.out.pficore.dyndns.org.kzk.log.WARNING.20081015-131953.7491
ログファイル名は、”program name”.”hostname”.”user name”.log.”severity level”.”date”.”time”.”pid”になります。また、-log_dirオプションを指定しない場合は実は/tmpに吐かれています。また、”program name”.”serverity level”という名前で最新の実行結果のログへのリンクが作成されます。
デバッグ用にstderrだけにログファイルを吐きたい場合は、-logtostderr=1というフラグをつけます。標準ではERRORレベル以上のものしか出力されないので、-stderrthreshold=0とするとINFOから出力されます (ログレベルはINFO, WARNING, ERROR, FATAL の順に 0, 1, 2, 3)。
pficore% ./a.out -logtostderr=1 -stderrthreshold=0 I1015 133604 glog.cpp:7] INFO W1015 133604 glog.cpp:8] WARNING E1015 133604 glog.cpp:9] ERROR F1015 133604 glog.cpp:10] FATAL @ 0x2ba7fa406ca7 google::LogMessage::SendToLog() @ 0x2ba7fa403017 google::LogMessage::Flush() @ 0x2ba7fa403216 google::LogMessageFatal::~LogMessageFatal() @ 0x400bb8 main @ 0x2ba7fb2078e4 (unknown) @ 0x4009c9 (unknown)
ファイルにもstderrにも吐かせたい場合は、-alsologtostderr=1というフラグを利用します。
デバッグ時にはVLOG関数が役立ちます。
#include
int
main(int argc, char **argv)
{
google::InitGoogleLogging(argv[0]);
google::ParseCommandLineFlags(&amp;amp;amp;amp;amp;amp;amp;argc, &amp;amp;amp;amp;amp;amp;amp;argv, true);
VLOG(1) << "VLOG 1";
VLOG(2) << "VLOG 2";
}
コンパイル & 実行します。
pficore% g++ glog.cpp -lglog -lpthread -lgflags; pficore% ./a.out -v=1 -logtostderr=1 -stderrthreshold=0 I1015 134214 glog.cpp:7] VLOG 1 pficore% ./a.out -v=2 -logtostderr=1 -stderrthreshold=0 I1015 134218 glog.cpp:7] VLOG 1 I1015 134218 glog.cpp:8] VLOG 2
VLOGのレベルはINFOと同じなので、-stderrthreshold=0を指定しています。また、-v=Nと指定すると、VLOG(X) (ただし X <= N) のメッセージが表示されます。
後、まだ動かし方が分かってないのが、moduleです。ファイル名ベースでモジュールが作成されるようなのですが、以下のようにしても何も出ないので、もう少し調べる必要が有りそうです (suffixは.ccに変更)。凄く初歩的なミスをしている気がしてならない。
#include
int
main(int argc, char **argv)
{
google::InitGoogleLogging(argv[0]);
google::ParseCommandLineFlags(&amp;amp;amp;amp;amp;amp;amp;argc, &amp;amp;amp;amp;amp;amp;amp;argv, true);
VLOG(1) << "VLOG 1";
VLOG(2) << "VLOG 2";
}
pficore% g++ glog.cc -lglog -lpthread -lgflags
pficore% ./a.out --vmodule=glog=2 -logtostderr=1 -stderrthreshold=0
一定レベル以上のメッセージをメールで送信する機能もあるので、これも試してみたいと思っています。ログローテート周りも調べないとな。ざっとそんな感じです。
ちょうどid:tkngさんと、ロギングライブラリ欲しいよねーと話していたところにこれがリリースされたので、正直凄くありがたいです。欲しい機能は大体あるし。
google++ shinh++ !!!
P.S
このコメントへーって思った。
// fwrite() doesn't return an error when the disk is full, for // messages that are less than 4096 bytes. When the disk is full, // it returns the message length for messages that are less than // 4096 bytes. fwrite() returns 4096 for message lengths that are // greater than 4096, thereby indicating an error.
まあfwrite()の返り値は write(2)で泣きを見た ISer なら誰でもチェックすると思われるが (including me)、disk full時の細かい挙動までは知らなかった。
- Comments: 0
- Trackbacks: 0
論文
- 2008-10-04 (Sat)
- 研究

submitted。今は何もやる気がしない。
ところで、先週月曜から水曜日までCluster 2008というのに参加して、ポスター発表してきました。クラスター関連技術(MPIとか)についての学会です。
凄げな人たちと色々話せて楽しかったです。研究室に留学生が来て、英会話が普通に出来る環境になったおかげで、大分コミュニケーションが楽でした。
Infinibandで超速いらしいMPI実装のMVAPICHで有名なD.K.Panda先生、Argonne National LaboratoryのPete Beckmanさんの話などが面白かったです。Exa-Scale Computerとか想像がつかない。
僕の出した論文とポスターはPublicationsに載せてあります。
岡野原先生を見てると公開したほうがよさげに見えたので、恥ずかしいけどページを作ることに。これを機にトップだけ全英語にしてみました。このPosterPaperは小手調べなので今日出した奴が通って欲しい・・・。
しかし論文は産む苦しみが強すぎる。世の中の研究者と呼ばれる人たちは何をモチベーションにしてるんだこれ・・・全く理解できない・・・
- Comments: 0
- Trackbacks: 0
JJUG CCCでプレゼンします
@kisさんに誘って頂き、プレゼンさせて頂くことになりました。@kisさんとはSWoPP2008で初めてお会いして、なぜか最近良くお会いします。
「100行で書く分散検索エンジン」という題です。Hadoop+Luceneで分散検索エンジンを作る話です。基本的にはこれの解説と続きです。
ちなみに最初に覚えたプログラミング言語はJavaですがいまいち好きでは有りませんw でもScalaには興味が有るので水島さんのセッションも楽しみ。
ちなみにポロリは無いよ!
- Comments: 2
- Trackbacks: 0
Home > Archives > 2008-10
-
- August 2010
- May 2010
- February 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- July 2006
