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 集合中的对象的最大大小是多少?