如何分析 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 路径在哪里?
从 app-Engine 上的 java 类向 Android 客户端发送 PUSH 通知
Google-App-Engine 上的 Grails - 它死了吗? [关闭]