3

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

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

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

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

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

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

4

3 回答 3

0

您可以阅读更多关于根据您的需要为正在运行的应用程序调整应用程序性能的信息,并且从同一链接您可以看到每个前端类所具有的内存和 CPU。

于 2013-04-03T11:36:12.630 回答
0

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

于 2013-04-03T13:57:44.417 回答
0

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

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

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

于 2013-04-03T14:55:26.703 回答