http-get を連続に実施していると、際限なくメモリを使う。もちろん、『作り』が悪いのは否めないけど、GCが制御できないので、メモリが際限なく使われると、スワップして他のプロセスにも影響してしまう。
環境は以下のとおり

  • opensolaris (Solaris11) / x86
  • Gauche scheme interpreter, version 0.8.13 [utf-8]
  • configure のオプションは下記のとおり

    ../configure ‘–prefix=/usr/local/gauche’ ‘–enable-multibyte=utf-8’ ‘–enable-threads=none’ ‘–with-local=/usr/local/gdbm’ ‘–with-rpath=/usr/local/gdbm/lib’ ‘CFLAGS=-O2 -march=pentium3 -fprefetch-loop-arrays -D_POSIX_PTHREAD_SEMANTICS’

何だろうなぁ、と思ってしらべてみたけど、出てくる情報は

GCと相性の悪いデータ構造を扱う – Gaucheクックブック

Gauche:メモリリーク

が見つかった。ただ、該当のプログラムはそんなことをしていなかったので、違うと判断した。
とりあえず、使用メモリが 400Mbytes くらいになったところで、gcore で core を取得してみた。中身を確認すると、\0 の場所が多い。BoehmGC の仕様をしらないから、何となくだけど、メモリが断片化しているのかなぁ、と思った。GCする前に次の情報を処理して、、、みたいな状態が続いたりしていると断片化してしまうのはしょうがないとは思う。
とりあえず、GCするだけの時間を与えるために、http-get を合間に (sys-sleep 10) を入れてみると、際限なく使うことは無くなったようだ。

“Gaucheでのプログラミング” への1件のフィードバック

  1. > Gaucheでのプログラミングの
    > 際限なく使うことは無くなったようだ。
    関係ないみたいっす。今みたら 900M だった orz
    適当な時間で再起動するようにします。。。。

コメントを残す

メールアドレスが公開されることはありません。