直到现在我才想到这一点,我已经使用GAE已经有一段时间了 - 但是从来没有想过它的内存模型,因为它的JVM已经存在,我不知道它们是哪个JVM或JVM版本正在使用。
所以我的问题是GAE什么时候会抛出堆溢出错误?或者至少会打破我的应用程序或GAE会做什么。我不知道。
例如,我将String
推到我放置sizeof 2^31 -1
的数据的限制
设计明智:我知道这很疯狂,但想法是有数百万或数十亿或用户将数据推送到您的GAE应用程序,然后您的应用程序的工作是处理它(序列化/在坚持之前反序列化。
那些堆的总和将是巨大的,它们可能不会同时发生,但肯定会有一个切点,堆使用将是巨大的。
GAE应用程序必须与之相关吗?
答案 0 :(得分:0)
您可以根据需要在Adjusting Application Performance上阅读有关正在运行的应用程序的更多内容,并从同一链接中查看每个前端类具有的内存和CPU。
答案 1 :(得分:0)
您需要对其进行编码,以便您永远不会独立于用户负载运行。如果允许mutithread,您的实例可能会被重用,您需要考虑到这一点。如果mem,cpu或queue太高,则appengine会自动启动更多实例,每个实例都有自己的ram,在应用程序设置中指定(128mb,256mb等)
答案 2 :(得分:0)
GAE上的应用程序分布在许多实例中。如果您正在处理数百万个并发用户,那么您可能会运行数千个实例。每个实例都有其RAM(堆栈+堆空间)。
您的总堆可能很大,但在任何一点上,您只需要为特定实例上运行的请求管理堆,这只能同时处理相当有限数量的请求。有关不同实例类型的内存大小,请参阅:
https://developers.google.com/appengine/docs/adminconsole/performancesettings?hl=en