GAE 抛出堆溢出错误之前的最大对象大小是多少

Posted

技术标签:

【中文标题】GAE 抛出堆溢出错误之前的最大对象大小是多少【英文标题】:What is the maximum object size before GAE throws Heap overflow error 【发布时间】:2013-04-03 09:56:04 【问题描述】:

直到现在我才想到这个,我已经使用 GAE 有一段时间了——但从来没有想到它的内存模型,因为它的 JVM 已经存在,我不能说他们是哪个 JVM 或 JVM 版本正在使用。

所以我的问题是 GAE 什么时候会抛出堆溢出错误?或者至少会破坏我的应用程序或 GAE 会做什么。我不知道。

例如,我将String 推到了我使用 sizeof 2^31 -1 放置数据的限制

明智的设计:我知道这很疯狂,但这个想法与让数百万或数十亿或用户将数据推送到您的 GAE 应用程序中是一样的,那么您的应用程序的工作就是处理它(序列化/反序列化)在持久化之前。

那么这些堆的总和将是巨大的,它们可能不会同时发生,但肯定会有一个切点,堆使用量会很大。

这是 GAE 应用程序必须考虑的事情吗?

【问题讨论】:

【参考方案1】:

您可以根据自己的需要在 Adjusting Application Performance 上阅读更多关于您正在运行的应用程序的信息,并且从同一链接中您可以看到每个前端类所具有的内存和 CPU。

【讨论】:

【参考方案2】:

您需要对其进行编码,这样您就永远不会独立于用户负载运行 oom。如果您允许多线程,您的实例可能会被重用,您需要考虑到这一点。如果内存、cpu 或队列太高,appengine 会自动启动更多实例,每个实例都有自己的 ram,在应用设置中指定(128mb、256mb 等)

【讨论】:

【参考方案3】:

GAE 上的应用程序分布在许多实例中。如果您要同时处理数百万用户,您可能会运行数千个实例。每个实例都有自己的 RAM(堆栈 + 堆空间)。

您的总堆可能很大,但在任何时候,您只需要管理在特定实例上运行的请求的堆,该实例一次只能处理相当有限数量的请求。不同实例类型的内存大小参考:

https://developers.google.com/appengine/docs/adminconsole/performancesettings?hl=en

【讨论】:

以上是关于GAE 抛出堆溢出错误之前的最大对象大小是多少的主要内容,如果未能解决你的问题,请参考以下文章

对于 django/PostgreSQL DB - 推荐的最大对象大小应该是多少?

超出最大调用堆栈大小 - 没有明显的递归

使用 C# Driver 2.1.1 存储在 MongoDb 集合中的对象的最大大小是多少?

获取属性错误:类型对象“Level_2_Headings”没有属性“祖先”(GAE 数据存储)

ResultSet 的最大识别提取大小是多少[关闭]

JVM-内存溢出OutOfMemoryError