检查Elastic Beanstalk JVM堆的最佳方法

时间:2017-06-20 10:46:29

标签: java amazon-ec2 jvm elastic-beanstalk heap-dump

我需要从Elastic Beanstalk服务器获取JVM堆转储,但服务器没有jcmd或jmap。亚马逊本身并不使用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获取堆转储的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

我发现您可以通过安装正确的软件包来安装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>

答案 1 :(得分:0)

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

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

  • 通过JMX - 你很有可能找到HotSpotDiagnostic bean并且能够调用堆转储操作(Here有一个教程可以做到这一点)

    < / LI>
  • 如果您的应用程序是新的并且您有Spring Boot,那么可能可以插入具有&#34; / heapdump&#34;的弹簧执行器。仅为此目的的终点