今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

マルチスレッドとファイルアクセス

プログラムがオーバーランのログを連続して大量に出力した。オーバーランが発生したのはログをファイルに出力するクラス。あちこちからログの記録をイベントとして受け付けて、それを順次ファイルに出力するだけのクラス。これを作ったころに Log4J があったらよかったのに。。。
オーバーランと言っても、一定数のキューを持っていて、そのキューの上限を超えたことをオーバーランと見なしている。オーバーランが発生したら、キューにたまっている一部のイベントを破棄して、オーバーランが発生したことと破棄したイベント数をログに記録している。つまり、オーバーランが発生したらイベントを破棄するので、連続して発生することはあり得ない。
原因をつきとめようとコードを睨みつけるけど、原因になりそうな箇所は見当たらない。

イベント≫オーバーランのログ

なので、オーバーランのログだけが連続して記録されるってどういうことだろう?オーバーランのイベントを延々と発生し続けるコードがどこかに埋め込んである?
ファイルへの書き込みは単一のスレッドだけど、別のところから読み込みのリクエストがきたら一時的にファイルがロックされる。そのときにオーバーランが発生しない保証はないけど、あったとしても一時的なはず。
うむー。。。