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