【发布时间】:2020-01-06 02:04:11
【问题描述】:
我们正在开发一个基于微服务架构和Spring Boot技术的系统。
一切正常,我们喜欢它,但我们担心每项服务消耗的资源。
我们的系统分布在 8-12 个微服务中,每个微服务至少使用大约 550MB 的 RAM。
我们试图通过系统变量来限制资源,但性能严重下降,因此物理上限制资源不是一种选择。
mem_limit: 200m
memswap_limit: 400m
关于这个,我想知道:
用spring boot实现的服务消耗这么多内存是正常的吗? 我们可以做些什么来优化它?
配置:
我们目前使用 CentOS 7.5 作为运行 docker 的主机操作系统。
openjdk:11
【问题讨论】:
-
每项服务都是自己的世界。你在缓存数据吗?那是在堆上吗?还是堆外?哪个服务被调用很多,哪个不是?您正在使用什么 GC 算法(可能是 G1?)。您可能需要使用 VisualVM 或其他工具来运行每个服务,这些工具允许您查看内存并弄清楚如何处理每个服务。一个不经常调用的小型 Spring Boot 应用程序(3-4 个并发请求)可以使用 192MB 的 RAM 运行,但这取决于许多因素。做一个内存转储,看看到底是什么在消耗内存。
标签: spring-boot docker