当前位置: 首页 > 知识库问答 >
问题:

Tarantool应用程序内存限制

傅和璧
2023-03-14

日安,我是tarantool的新手,我有一个关于tarantool内部客户端应用程序内存限制的问题,我有3亿个项目的内存数据库和选择其中一部分的lua应用程序,在选择我将结果包装为“类”后,从代码中进行更简单的交互。例如:

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.2GB的内存后出现故障

共有1个答案

须旭
2023-03-14

塔兰托使用luajit,这意味着限制来自luajit[1]。

此外,luajit(像lua)有一个垃圾收集器的问题[2],有时你必须手动调用它[3]否则你会有“OOM恐慌”。

[1]链接:

>

  • https://www.freelists.org/post/luajit/LuaJIT-x64-limited-to-31-bit-address-space-even-without-MAP-32BIT-restrictions

    http://lua-users.org/lists/lua-l/2010-11/msg00241.html

    http://timetobleed.com/digging-out-the-craziest-bug-you-never-heard-about-from-2008-a-linux-threading-regression/

    [2] http://wiki.luajit.org/New-Garbage-Collector

    [3]http://luatut.com/collectgarbage.html

  •  类似资料:
    • 问题内容: 说“用cpu = 800和内存= 1024运行myApp.jar” 我从事Java编程已经很多年了,问这个问题很尴尬。我什至不知道这是否可能。如果是这样,怎么办? 我只想知道是否可以设置Java程序的最大内存和cpu使用率。我突然想到了这个,因为我最近开始开发移动应用程序。我想知道该应用程序在内存和处理器非常有限的设备上的表现。 我看到带有演示应用程序的物理引擎可以在浏览器上运行,也可

    • 我是否正确理解了客户端模式的文档? 客户端模式与驱动程序在应用程序主程序中运行的集群模式相反? 在客户端模式下,驱动程序和应用程序主程序是独立的进程,因此+必须小于计算机的内存? 在客户端模式下,驱动程序内存不包括在应用程序主内存设置中吗?

    • 问题内容: 为了限制Java 7应用程序消耗的总内存,我可以使用以下公式(摘自本文): 最大内存= [-Xmx] + [-XX:MaxPermSize] +线程数* [-Xss] 删除PermGen之后,此公式对于Java 8应用程序将如何更改? 我应该使用选项“ -XX:MaxMetaspaceSize”来限制元空间消耗的最大内存吗? 问题答案: 是的,这里有代替。 还考虑限制直接ByteBuf

    • 我正在尝试使用micronaut创建内存开销较低的微服务。从使用micronaut开始,我遇到了一些问题,启动时内存开始变低,但加载时内存膨胀,无法恢复。 我正在用一个小应用程序测试它,该应用程序从Rest调用中获取一个项目,做一些工作,模拟内存峰值,并将结果存储在数据库中。如果我运行jar文件,应用程序从大约170mb的内存开始,在诱导的峰值位于大约700mb之后。本机映像具有类似的结果,尽管启

    • 我们在谷歌应用引擎(GAE)上有一个长期运行的服务。然而,过了一会儿,我们开始得到图像中的错误。代码没有变化。我不明白为什么我们会有以前没有的问题。 2020-01-05 08:31:32.704UTC-8在总共服务0个请求后,超过了2048 MB的软内存限制(2068 MB)。考虑在app.yaml.中设置一个更大的实例类 2020-01-05 08:31:32.705UTC-8此请求导致为应用

    • 我有一个tomcat服务器,可以处理一些rest API请求。这个tomcat崩溃是由于某些输入中的一个特定rest请求内存不足导致的,这会导致大量堆大小的使用,从而导致所有站点崩溃。 我想限制这个Rest请求内存使用我怎么能做到呢?我通常想保护tomcat免受大内存使用请求崩溃的影响。我怎么能做到呢?也许以某种方式限制所有线程最大堆大小?