如何分析应用程序引擎Java上的实际内存使用情况?

如何分析应用程序引擎Java上的实际内存使用情况?,java,google-app-engine,memory,Java,Google App Engine,Memory,我有一个AppEngineJava应用程序,它在自动缩放的F1实例(600MHz,128MB RAM)上运行。预热后,仪表板显示的每个实例的内存使用量保持在大约220MB。根据,这包括“运行时开销” 我假设这个数字反映了最大的permgen和堆大小,但不一定是实际使用的,对吗?我从未收到过内存不足错误 分析生产环境中内存使用情况的最佳方法是什么?有没有一种方法可以不顾应用程序引擎的运行时限制执行堆转储 使用(例如)VisualVM进行的本地分析无法提供准确的图像,因为它包括开发服务器、内存中

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

  • 我假设这个数字反映了最大的permgen和堆大小,但不一定是实际使用的,对吗?我从未收到过内存不足错误
  • 分析生产环境中内存使用情况的最佳方法是什么?有没有一种方法可以不顾应用程序引擎的运行时限制执行堆转储
使用(例如)VisualVM进行的本地分析无法提供准确的图像,因为它包括开发服务器、内存中版本的数据存储和Memcache等。总共,它添加了8000个加载的类(包括开发服务器、我自己的类和大约85个库),导致permgen大小为50 MB,在完全垃圾收集之后,堆的最小大小为50MB

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

分析生产环境中内存使用情况的最佳方法是什么?有没有一种方法可以不顾应用程序引擎的运行时限制执行堆转储

没有好办法。仪器没有得到很好的支持