簡単です。
大抵のRTOSには、プロセスやタスクごとのヒープの使用量(と占有量)を取得するインタフェースが用意されていると思います。されていなかったら、それはエセOSでしょう。
マニュアルに書かれていなくても、問い合わせすれば教えてくれます。
さて、デバッグ用にヒープをログに出すプログラムを作っている現場は多いと思うのですが、間抜けなのはヒープが枯渇したときにそのプログラムを使おうとすることです。
そんなものは、1時間に1回くらいの頻度で勝手にログに出すようにしておかなければなりません。
そうすれば動作確認や試験において、メモリのずぶの素人でも、メモリリークを指摘することができるようになるからです。
それをやらないからエンバグでメモリリークが生じるたびに、奇怪な現象がレポートされ、どこかのエセ技術者がdeleteを書き忘れたという原因を調べるのに貴重な工数が消耗されていくのです。
ログにヒープ使用量を出しておけば、それが異常に増えた後に妙な現象が起きていれば、すぐにメモリリークに目が行きます。
堅牢と信じ込まれている世に広く知れ渡ったシステムでも、ヒープメモリ不足で奇怪な現象が起きることは、failmallocのlsやrubyの結果を知れば、誰でも理解できるのです。
ガス欠でクルマが止まってしまったとき、エンジンが溶けたとか、ECUにバグがあるとか騒いでいるのが、ヒープをログに出さない現場の現状です。燃料計を見れば、誰でもすぐに燃料切れと分かります。燃料タンクと燃料計の仕組みは複雑怪奇で正しく理解している人は皆無ですが、それが切れたら動かないのは誰でも理解できます。燃料ホースに穴が開いているかどうかは、燃料計を見てから考えればよいことなのです。
おわかりでしょうか。
・[ログなし]システムが止まる→原因はまったく不明
・[ログあり]システムが止まる→ヒープログを見る→メモリ不足の問題かどうか切り分けできる。
コメント