Micro Docker 容器的内存使用情况

Memory usage of Micro Docker containers

提问人:John Manko 提问时间:11/17/2023 最后编辑:John Manko 更新时间:11/17/2023 访问量:28

问:

我的堆栈中有多个 Payara Micro Docker 服务,有些服务具有多个副本。他们的容器是图像,扩展了 Payara Micro 的形象。这是非常基本的:

FROM payara/micro:5.2022.5-jdk11
COPY target/*.war $DEPLOY_DIR
EXPOSE 8080 8181
CMD ["--deploymentDir", "/opt/payara/deployments", "--contextroot", "a"]

这些应用程序只不过是公开几个 REST 端点,并将数据封送到/从其数据库(SQL Server 和/或 MongoDB)封送数据 - 只需很少的数据操作/处理/整形:

JAX-RS Endpoint -> Local EJB -> Database

在没有任何资源限制的情况下,容器会分配 1GB 的内存!

我以为我可以将容器内存分配降低到小于 100MB,但由于内存要求,容器会失败。我已经确定了最大 700MB,初始为 500MB,容器最初似乎在空闲时使用了高达 460MB 的内存。请记住,这些是每个小应用程序,它们的作用只不过是基本的 CRUD(有些甚至只是只读的!

  a-service:
    image: repo/services-a:1.2.3
    depends_on:
      - mongo
    ports:
      - "8081:8080"
    deploy:
      replicas: 2
    env_file: .env
    networks:
      - net
    environment:
      - MEM_MAX_RAM_PERCENTAGE=80
    deploy:
      resources:
        limits:
          cpus: '1.00'
          memory: 700M
        reservations:
          cpus: '0.50'
          memory: 500M

以下是 Docker Desktop 中其中一个服务启动的实时图表的屏幕截图:

Memory usage upon start-up

这是运行简单压力测试后的另一个屏幕截图:

for run in {1..2000}; do curl -s http://127.0.0.1:8081/a/api/v1/document/details/62fbd94e2b276e0f3d6fcc30 > /dev/null; done

Memory usage during stress test

如您所见,整个 2000 个请求的内存使用量 (~10MB) 几乎没有增加。

即使 500MB/服务,这也是过分的。再加上几个服务/容器,这是令人望而却步的。

我能做些什么来减少这些Payara Micro容器的内存占用?理想情况下,我希望将它们降低到大约 50MB(甚至 100MB),但此时的任何减少都是受欢迎的。

指标:

base_classloader_loadedClasses_count 22590
base_classloader_loadedClasses_total_total 22617
base_classloader_unloadedClasses_total_total 27
base_cpu_availableProcessors 1
base_cpu_systemLoadAverage 0.09912109375
base_gc_time_total{name="MarkSweepCompact"} 451
base_gc_time_total{name="Copy"} 639
base_gc_total_total{name="MarkSweepCompact"} 6
base_gc_total_total{name="Copy"} 136
base_jvm_uptime_seconds 1665.407
base_memory_committedHeap_bytes 1.73539328E8
base_memory_committedNonHeap_bytes 2.04734464E8
base_memory_maxHeap_bytes 5.67672832E8
base_memory_maxNonHeap_bytes -1
base_memory_usedHeap_bytes 1.38958704E8
base_memory_usedNonHeap_bytes 1.982758E8
base_thread_count 86
base_thread_daemon_count 72
base_thread_max_count 97
vendor_system_cpu_load 0.00928

jstat

$ jstat -gc 1
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT   
5824.0 5824.0 970.5   0.0   46848.0  41339.2   116800.0   93516.7   136320.0 132541.5 17024.0 15556.6    142    0.659   6      0.451   -          -    1.111

java docker jvm payara payara-micro

评论


答: 暂无答案