[英]How to get JVM Heap Size of Running Spring Boot (Spring Web MVC) API (runtime)?
我在 Docker 容器内运行的 AWS 弹性容器服务 (ECS) 上托管了一个 Spring Boot API。 我正在使用一个m5.xlarge实例,它在集群的16GB on physical RAM
上有4 vCPUs
和16GB on physical RAM
。 我目前正在微调 CPU 和内存,但发现它非常随机和乏味,尽管遵循了这篇文章: https : //medium.com/@vlad.fedosov/how-to-calculate-resources-reservation-for-ecs-任务-3c68a1e12725
我仍然对设置 JVM 堆大小的内容有些困惑。 从我读到的内容来看,Java 10+ 允许自动检测容器,并将 JVM 设置为容器 RAM 的 25%(或者这是集群的实际物理 RAM??),但是,我使用的是 Java8
我正在通过 VM 参数记录垃圾收集日志:
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:${LOG_DIR}/gc.log -
我的问题是——
-Xms
或-Xmx
JVM 堆大小应该是 16GB * 0.25 = 4GB 正确吗??但请记住,您的应用程序不仅是堆的,它也是堆外的——而且跟踪堆外并不是那么容易(例如,本机内存跟踪正在消耗额外的资源等)——最简单的方法是抓取线程转储(最快的方法,但不是PROD env 上的推荐是使用 JDK 构建您的应用程序,在应用程序终端中运行 jstack 命令并将其重定向到持久存储上的文件)。 然后你也可以在https://fastthread.io/可视化它
开始调查您的应用程序 - gc.log 如果您没有发现任何可疑内容,那么您需要检查您的容器利用率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.