检查 Elastic Beanstalk JVM 堆的最佳方法
Best method for inspecting Elastic Beanstalk JVM heap
我需要从 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 获取堆转储的最佳方法是什么?
免责声明:我从未使用过 Elastic Beanstalk,但我建议您检查以下内容:
考虑以编程方式进行堆转储,我的意思是从 Java 应用程序本身内部进行。有很多方法可以做到这一点:
通过 JMX - 您可能会找到 HotSpotDiagnostic bean 并且能够调用堆转储操作(Here 有一个教程可以做到这一点)
如果您的应用程序是新的并且您有 Spring 引导,那么可能可以插入 Spring 具有“/heapdump”端点的执行器只是为了这个目的
我发现您可以通过安装正确的软件包来安装 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>
我需要从 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 获取堆转储的最佳方法是什么?
免责声明:我从未使用过 Elastic Beanstalk,但我建议您检查以下内容:
考虑以编程方式进行堆转储,我的意思是从 Java 应用程序本身内部进行。有很多方法可以做到这一点:
通过 JMX - 您可能会找到 HotSpotDiagnostic bean 并且能够调用堆转储操作(Here 有一个教程可以做到这一点)
如果您的应用程序是新的并且您有 Spring 引导,那么可能可以插入 Spring 具有“/heapdump”端点的执行器只是为了这个目的
我发现您可以通过安装正确的软件包来安装 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>