Foo = {}
Foo.__index = Foo
function Foo.create(rawData)
local self = setmetatable({}, Foo)
self.PrimaryId = rawData[1]
self.BarId = rawData[2]
local fields = rawData[3]
self.Name = fields[1]
self.Date = fields[2]
return self
end
和用法:
local data = box.space.Foo.index.barId:select({barId})
local ctor = Foo.create
local foo = {}
for i = 1, #data do
table.insert(foo, ctor(data[i]))
end
首次运行时大多数情况下它运行成功,但是第二次运行成功率为100%概率失败并显示消息(tarantool消息):
PANIC: unprotected error in call to Lua API (not enough memory)
据我所知,内存使用存在问题(非释放内存),但我对限制有疑问 - 是否对lua应用程序有一些限制?因为我在监视器中看到内存消耗并注意到有足够的可用内存并且在应用程序启动后出现失败使用超过1.2 Gb
答案 0 :(得分:2)
Tarantool使用luajit,这意味着限制来自luajit [1]。
另外,luajit(比如lua)有一个垃圾收集器问题[2],有时候你必须手动调用它[3]或者你会有“OOM恐慌”。
[1]链接: