メモリ(これは古い日記です)

自宅マシンにはメモリが3G載ってて、実際こんな必要ねえだろ、と前から思っていたが、先日、3Gオーバーしそうになった。

普段、何もしていない状態でもSleipnirが400Mくらい使ってたりして、最近は大抵1G以上メモリを使用中の状態なわけだが、その上で、ログ解析プログラムを走らせたら、2.8G以上いって、仮想メモリオフにしてるし、これはやべえ、という状況になったが、なんとかぎりぎり足りたようだ。

ログファイルが合計で1G以上になったりするので、通常は必要な部分だけ読みこみ、不必要な部分は解放するような最適化をしてはいるのだが、どうしてもログファイル全体に渡って、ログファイル間の関連を調べる必要があるときには、ファイルを全てなめる必要があるわけだ。

もちろんここにも最適化の余地はあるのだが、こういった最適化の部分はバグの温床になる。既に行っている最適化では、プログラム中で、ファイルから読み込んだエントリのファイル中の位置情報とか、簡単な部分だけを残し、とりあえず不必要なメモリは解放し、プログラムの解析部分には、「全てある」と見せかけておいて、本当に必要となったときに、実体を再びファイルから読みこんで再構成する。でもたまに、再読み込みが必要なときに読み込んでいないバグがあったりすると、プログラムが落ちるし、必要以上に「解放」、「再読み込み」を繰り返すと、ファイル読み込み時間がボトルネックとなり、今度は速度が犠牲になる。メモリ容量最適化はログ解析の目的自体ではないのに、不必要な複雑性を持ち込むため、メモリが潤沢にあるのなら、できればやりたくない処理なわけだ。

まあとりあえず、3G積んだメモリにも、最後の200Mまで活躍の場面があったので、とりあえず積みすぎではなかったかな、という結論です。