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

Dav*_*ger 7 java memory google-app-engine

我有一个App Engine Java应用程序,它运行在自动缩放的F1实例(600 Mhz,128 MB RAM)上.预热后,仪表板显示的每个实例的内存使用量保持在220 MB左右.根据文档,这包括"运行时开销".

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

使用例如VisualVM的本地分析不能提供准确的图片,因为它包括开发服务器,内存版本的数据存储区和Memcache等.总共,它总共增加了8,000个加载类(包括开发服务器,我自己的类和大约85个库),得到的permgen大小为50 MB,完整垃圾回收后最小堆大小为50 MB.

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

Jas*_*rup 0

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

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