理解GAEJ上的内存使用和前端实例类

dor*_*ght 1 google-app-engine

我正在尝试找到在GAE上配置我的App实例的最佳方法.

我在GWT/GAEJ上运行Saas.我有少量高级用户全天使用该应用程序(而不是每天使用该应用程序的大量用户).

因此,我正在尝试找到配置我使用前端实例类的最佳方法,以使其最有效,并提供最佳的用户体验.

我已启用计费,并发现我需要运行空闲实例以避免实例启动时的延迟.我使用JDO,每次启动时,每个实例都需要很长时间来初始化数据存储访问.所以我启动了许多应用程序实例,让它们以空闲模式运行.这提供了很好的用户体验,但显然意味着我为那些闲置的实例付费 - 不理想.

我将调查是否可以更有效地做到这一点.

不过这是背景,我真正的问题如下; 如果我查看我的实例的内存使用情况,他们会经常说136MB等(它们的起始值约为66MB).所以我想我有一些内存泄漏要找.但具体来说我想知道:

  1. 我也使用Memcache,想必在上面的计算中考虑到这个内存?

  2. 我目前使用F1实例类,其内存大小为128MB.那么对于我的实例来说,这似乎意味着大约136MB的大小是什么意思呢?他们会一直运行得更慢,因为他们会一直交换到磁盘吗?出于这个原因,我会更好地运行单个F2实例而不是2个F1实例吗?

  3. 我发现即使我有2个空闲实例,GAE也会非常恼火地启动新实例.尽管我将最小延迟设置得非常高(7.5秒).我在文档中读到这个设置在使用空闲实例时效果不大,但是如何确保只使用空闲实例,而不需要启动新的(由于数据存储初始化问题,这总是会导致更长的延迟)上文提到的)?(并且通过更多实例时间增加了我的成本)

我误解了什么吗?非常感谢任何帮助.

Pet*_*ego 5

几点说明:

一个.JVM按需获取内存,但很少将其发布回操作系统.这不是内存泄漏.

湾 您可以调整待处理实例的数量和响应时间.这使您可以控制正在运行的实例数.请参阅有关性能设置的文档.

C.如果您的代码启动缓慢,并且您不希望在启动期间需要很长的响应时间,则可能需要使用预热请求.

现在回答问题:

  1. Memcache是​​前端实例外部的服务,AFAIK不在前端实例上存储对象.因此,Memcache中的对象总数不应该反映在前端实例使用的内存中.

  2. 前端实例的实际底层实现尚不清楚(至少在谷歌之外),但我怀疑他们使用本地磁盘进行交换.您始终可以尝试使用F2实例并查看其工作原理.

  3. 延迟设置指令新实例的旋转.如果请求在队列中停留的时间太长,则新实例将被启动.如果你的实例需要很长时间才能启动,这可能会造成恶性循环.尝试使用预热请求.