检查 Elastic Beanstalk JVM 堆的最佳方法

Posted

技术标签:

【中文标题】检查 Elastic Beanstalk JVM 堆的最佳方法【英文标题】:Best method for inspecting Elastic Beanstalk JVM heap 【发布时间】:2017-11-22 20:56:52 【问题描述】:

我需要从 Elastic Beanstalk 服务器获取 JVM 堆转储,但该服务器没有 jcmd 或 jmap。 Amazon 本身并不使用 JDK 安装它们。这是安装的内容:

[ec2-user@ip-x-x-x-x ~]$ sudo yum list installed|grep jdk
java-1.7.0-openjdk.x86_64             1:1.7.0.111-2.6.7.2.68.amzn1 @amzn-updates
java-1.8.0-openjdk.x86_64             1:1.8.0.101-3.b13.24.amzn1   @amzn-updates
java-1.8.0-openjdk-headless.x86_64    1:1.8.0.101-3.b13.24.amzn1   @amzn-updates

从 Elastic Beanstalk 上的 JVM 获取堆转储的最佳方法是什么?

【问题讨论】:

您是否设法从 EBS 上的 JVM 获取堆转储? 【参考方案1】:

我发现你可以通过安装正确的包来安装 jmap:

sudo yum install java-1.8.0-openjdk-devel

这至少应该允许生成堆转储。

另外,要确保jmap中的所有功能都运行,还要安装:

sudo yum --enablerepo='*-debug*' install java-1.8.0-openjdk-debuginfo

虽然这可能取决于您使用的基线、tomcat 版本等。

创建堆转储时,使用tomcat用户:

sudo -u tomcat jmap -dump:live,file=/tmp/test.hprof <pid>

【讨论】:

【参考方案2】:

Disclamer:我从未使用过 Elastic Beanstalk,但我建议您检查以下内容:

考虑以编程方式进行堆转储,我的意思是从 Java 应用程序本身内部。有很多方法可以做到这一点:

通过 JMX - 您很有可能会找到 HotSpotDiagnostic bean 并能够调用堆转储操作(Here 有一个教程)

如果您的应用程序是新的并且您有 Spring Boot,那么可能只是为此目的插入具有“/heapdump”端点的 Spring Actuator

【讨论】:

以上是关于检查 Elastic Beanstalk JVM 堆的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

将 JVM 参数传递给 AWS Elastic Beanstalk 上的 Java 应用程序

AWS Elastic Beanstalk 运行状况检查偶尔失败

AWS Elastic Beanstalk Django 应用程序健康检查问题

如何解决 AWS Elastic Beanstalk Django 运行状况检查问题

在 Elastic beanstalk 中将 ELB 设置为 Autoscaling Health Check Type

在 aws elastic beanstalk 中启动节点 pm2 进程管理器的问题,npm 更新检查失败