hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
07/05/2008 うむ [長年日記]
07/09/2008 む [長年日記]
tDiary 2085日目
■ [日記] 夢
通ってた大学の廊下.
見覚えのある人とすれ違った.
振り返ると,死んだ知り合いだった.
「ちょ! おま!」
呼び止めようとしたけど,隣の研究室に入ってしまった.
すぐに俺も隣の研究室に入った.
けど誰もいなかった.
何だかとても悲しくなって,たくさん涙が出た.
というところで起きた. 何だ一体.
■ [日記] syslog-ng 云々
- dest driver "program" と syslog-ng は pipe でつながってるくさい (afprog.c afprogram_dd_init)
- syslog-ng 側 pipe はノンブロッキングモードで書き込みが行われるくさい (afprog.c afprogram_dd_init で g_fd_set_nonblock (実体は misc.c) を呼んでる)
- pipe への書き込みが失敗すると,EAGAIN でも EINTR でもない場合に限り最終的に afprogram_dd_deinit と afprogram_dd_init が呼ばれて program が再起動されるくさい (log_writer_broken → log_pipe_notify → notify (afprogram_dd_notify))
全体がぼんやりだからあんまし自信ないけど.
- pipe(7) によれば,O_NONBLOCK 有効, 書き込みサイズ <= PIPE_BUF の場合には,write(2) 失敗時には EAGAIN となる.この場合何事もなかったかのように partial flush の pos 0 で処理続行
- O_NONBLOCK 有効, 書き込みサイズ > PIPE_BUF の場合には,バッファがいっぱいの場合は write(2) が即座に EAGAIN で失敗するが,そうでない場合,一部のみ書き込みが行われる可能性がある.この場合 partial flush として処理され,次回へ持ち越し
- PIPE_BUF は Linux 2.6.11 以降では 65536 バイトらしい
例えば program が pipe (つまり stdin) からデータを吸い出すスピードが syslog-ng による pipe への write スピードよりも下回っていた場合,普通に考えれば pipe バッファがすぐに溢れる. 上記を踏まえると,このような場合は EAGAIN で正常終了処理続行なので,その間もどんどん queue に溜まっていくイメージか. そのうち queue も溢れて drop メッセージが出るようになるかな. いたるところにバッファがあってわけが分からんな.
更に言うならこれら全部想像でしかないという罠. 実はぜんぜん違ったりして.
syslog-ng の write queue は log_fifo_size オプションで制御できるっぽい.
07/15/2008 ふむ [長年日記]
tDiary 2091日目
■ [日記] ちょっと面白い
use strict; use warnings; use IO::Handle; use Time::HiRes qw(gettimeofday setitimer ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF); STDOUT->autoflush(1); my $alrm = 0; my $vtalrm = 0; my $prof = 0; $SIG{'INT'} = sub { exit(0); }; $SIG{'ALRM'} = sub { printf "SIGALRM(%d): %s.%s\n", ++$alrm, gettimeofday(); setitimer( ITIMER_REAL, 1 ); }; $SIG{'VTALRM'} = sub { printf "SIGVTALRM(%d): %s.%s\n", ++$vtalrm, gettimeofday(); setitimer( ITIMER_VIRTUAL, 1 ); }; $SIG{'PROF'} = sub { printf "SIGPROF(%d): %s.%s\n", ++$prof, gettimeofday(); setitimer( ITIMER_PROF, 1 ); }; setitimer( ITIMER_REAL, 1 ); setitimer( ITIMER_VIRTUAL, 1 ); setitimer( ITIMER_PROF, 1 ); while(1) { };
nice 0 だとどんどんずれていくけど,nice -20 にするとずれ幅が小さくなる. RT プロセスにしたらずれが極小になるはずだと思うんだけど,イコール CPU 時間を占有することになるはずで,つまりずれとか以前にシステムが死ぬ気がするので試してない.
□ smbd [長期間保存しすぎ何じゃね? あと湿度? ]
□ atzm [そんな過酷な環境に置いてはいないはずなんだけどな... ]