Jam*_*mes 5 java linux memory jvm spring-boot
我在一台 32GB 的机器上运行着 23 个 Java 进程。没有进程指定 JVM 内存参数,例如 Xmx。java -XX:+PrintFlagsFinal -version | grep MaxHeapSize报告最大默认堆大小如预期为 8GB。
每个进程都运行嵌入式 Tomcat(Spring Boot 应用程序(大多数版本为 2.3.4)),除了一个是运行三个 WAR 的独立 tomcat 9 实例。这些应用程序的使用率较低(通常是一名用户每天使用 10 分钟)。它们不是内存或 CPU 密集型的。其中之一是 Spring Boot admin,另一个是 Spring Cloud 的 Eureka 服务注册表。对于这两个,我只有一个主要方法来简单地引导 Spring Boot 应用程序。
然而,RES如顶部所示,每个进程的内存都在逐渐增加。例如,Spring Boot 服务注册表在过去 12 小时内从 1.1GB 增加到 1.5GB。所有进程都显示出类似的小幅增长,RES但在同一 12 小时内,总的增长使可用内存减少了 2 GB。过去 12 小时(依此类推)也是如此,直到当前可用内存仅为 4.7GB。
我担心的是,我会继续看到这种趋势(即使没有使用应用程序)。内存永远不会从应用程序中释放,因此可用内存总量持续减少。这是正常的吗,因为也许每个 JVM 都会看到操作系统中的内存仍然可用并且有 8GB 堆空间可供使用?一旦达到操作系统可用内存阈值,JVM 是否会在某个时刻停止占用内存?或者它会一直持续到所有可用内存都被用完为止?
更新
大多数应用程序使用的堆小于 200MB,但堆大小为 1.5 - 2.8GB。堆最大为 8GB。
| 归档时间: |
|
| 查看次数: |
1533 次 |
| 最近记录: |