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

时间:2014-05-21 11:38:35

标签: java google-app-engine memory

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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