如何分析 App Engine Java 上的实际内存使用情况?

Posted

技术标签:

【中文标题】如何分析 App Engine Java 上的实际内存使用情况?【英文标题】:How to analyze actual memory usage on App Engine Java? 【发布时间】:2014-07-10 00:45:03 【问题描述】:

我有一个在自动扩展的 F1 实例(600 Mhz,128 MB RAM)上运行的 App Engine Java 应用程序。预热后,仪表板显示的每个实例的内存使用量保持在大约 220 MB。根据docs,这包括“运行时开销”。

我是否正确地假设这个数字反映了最大 permgen 和堆大小,但不一定是实际使用的数字?我从未收到内存不足错误。 在生产环境中分析内存使用情况的最佳方法是什么?尽管有 App Engine 的运行时限制,有没有办法执行堆转储?

使用例如 VisualVM 的本地分析不能提供准确的图像,因为它包括开发服务器、内存中的 Datastore 和 Memcache 版本等。总共添加了 8,000 个加载的类(包括开发服务器、我自己的类和大约 85 个库),生成的 permgen 大小为 50 MB,在完全垃圾回收后最小堆大小为 50 MB。

我的问题的一些背景知识:调度程序有时(通常在完成常规同步作业后的前几个请求期间)启动一个新实例来处理通常仅由一个实例处理的请求负载。在更多请求之后,所有请求将再次完全一致地路由到第一个实例。根据here 概述的一组调度程序规则,我试图弄清楚这种行为是否可能是由于调度程序预测(临时)缺乏实例内存来处理额外的请求。

【问题讨论】:

【参考方案1】:

在生产环境中分析内存使用情况的最佳方法是什么?尽管有 App Engine 的运行时限制,有没有办法执行堆转储?

没有什么好办法。检测工具没有得到很好的支持。

【讨论】:

以上是关于如何分析 App Engine Java 上的实际内存使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

OSX 上的 Google App Engine SDK 路径在哪里?

如何浏览本地 Java App Engine 数据存储?

从 app-Engine 上的 java 类向 Android 客户端发送 PUSH 通知

Google-App-Engine 上的 Grails - 它死了吗? [关闭]

如何在 Google App Engine 的 app.yaml 文件中配置 servlet 过滤器?

Google App Engine 上的 JDO 与 JPA for Java