2006/03/14
ADEXの呪い
ADEX(Ariel Delta Engine for XMLの略。読み方はアデックスまたはエイデックス)に、最近バグが見つかりました。 ADEXの詳細は、大谷さんがユニマガに書いた記事(http://dev.ariel-networks.com/articles/unixmagazine/afw/)を参照してください。 簡単に説明すると、Levenshtein距離(http://www.merriampark.com/ld.htm)をXMLに適用した、XMLデルタ生成、マージ処理のコンポーネントです。
アリエルフレームワーク(afw)は、対外的にはP2Pのフレームワークとして通っていますが、本当のところ、XMLデルタ交換をベースにした分散XML-DBフレームワークと言った方が実体に近いかもしれません。
バグは、ある条件で再帰的処理が大量のメモリを消費する問題でした。 メモリ使用量が増えた時にデバッガで止めて、コールスタックを見ると問題の場所はすぐに特定できました。 呪いは解いたつもりですが、問題の場所を特定するまでが難儀でした。 こう聞くと、なぜ、デバッガで止めるだけの簡単なことに苦労したのかと不思議に思うかもしれません。理由は、メモリ使用量があまりに急激に増えてスワップアウトにCPUが取られたため、ウィンドウシステムが事実上反応しなくなったからです。デバッガを操作することすら困難になっていました。
時間がかかった理由はこれだけではないのですが、コールスタックを見れば簡単に原因が判明すると分かっていれば(もちろん、分かっていなかったわけですが)、メモリ確保APIにスリープをいれるとか、手はあったかもしれません。今さら後悔しても仕方がないので、今後の教訓として生かします。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/adex/tbping