3

我在具有 1GB Ram 和 256MB 交换空间的 Linux (Fedora 15) 32 位系统(内核 3.6.5)上运行 SBCL 1.0.51。

我启动sbcl --dynamic-space-size 125并开始调用一个函数,该函数向 http (couchDB) 服务器发出约 10000 个 http 请求(使用 drakma),我只是将返回数据的操作结果格式化为标准输出。

每次通话后,我都会做 a(sb-ext:gc :full t)然后(room)。结果没有增长。无论我运行该函数多少次,(room)都会报告相同的已用空间(有一些起伏,但大约是相同的平均值,不会增长)。

但是:每次我调用该函数后,top 都会报告 sbcl 进程的 VIRT 和 RES 数量不断增长,甚至超过了我告诉 sbcl 自己请求的 125MB 空间。所以我有以下问题:

  1. 为什么top-reported 内存不断增长,而(room)说它没有?我唯一能想到的是通过 ffi 的一些泄漏。我不是直接用 ffi 呼唤,但也许有些 drakma dep 确实忘记了释放它的 C 垃圾。无论如何,我不知道这是否可以作为解释。会不会是别的东西?有什么见解吗?
  2. 为什么不--dynamic-space-size被尊重?
4

0 回答 0