這套輪子功能相當多,提供了許多 Data Structure Function 與 Algorithm 使用,不過如果真的要用的話,我也許會選擇其他 BSD license 的 library (qdbm 是 LGPL),像是 libisc (從 BIND 裡抽出來的)。
這次遇到 HyperEstraier 看起來有 memory-leak 的問題是 cabin(3) 的
cbmapout()
產生的。cbmap* 是處理 Hash 的 Data Structure Function,cbmapout()
會將元素從 Hash 中移出,不過我測試的結果發現移出後並不會釋放記憶體,於是就會造成 memory-leak 的「假象」,不過實際上這些記憶體會重複被使用,並沒有 memory-leak 的情況發生。這可能是因為 resize 的 overhead 考量而故意設計的。所以塞資料進 HyperEstraier 要注意在塞一定的數量後對每個 node 下一次 sync 指令,強迫將快取的內容寫回硬碟後清掉,另外一個方法是把上一篇對
estmaster.c
的 patch 拿掉,這樣理論上在固定一段時間沒有動作後就會寫回去。(不過就不能一次大量寫進去,快取的大小會超過 process size...)
沒有留言:
張貼留言