首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot服务正在消耗太多内存

Spring boot服务正在消耗太多内存
EN

Stack Overflow用户
提问于 2019-09-03 15:38:02
回答 1查看 710关注 0票数 0

我们正在开发一个基于spring boot技术的微服务架构的系统。

一切都很好,我们喜欢它,但我们担心每个服务消耗的资源。

我们的系统分布在8-12个微服务中,每个服务至少使用大约550MB的RAM。

我们试图通过系统变量限制资源,但性能严重下降,因此在物理上限制资源不是一种选择。

代码语言:javascript
复制
mem_limit: 200m
memswap_limit: 400m

对此,我想知道:

使用spring boot实现的服务消耗这么多内存是正常的吗?我们能做些什么来优化它吗?

配置:

我们目前使用CentOS 7.5作为运行docker的主机操作系统。

openjdk:11

EN

回答 1

Stack Overflow用户

发布于 2019-09-03 16:55:14

这很正常。我们遇到了同样的问题。经过研究,我提出了以下解决方案:

Strikt内存限制导致以前没有错误的地方出现更多错误(容器和java堆空间中严格的内存限制)

基本的想法是为服务提供更多的内存,而不是你在内存中实际可用的内存。要处理最终可能导致内存问题的峰值,您可以在主机系统上使用swap。在我看来,在docker容器中不需要一些交换内存限制。当内存非常满时,主机系统的内核将管理这一点。

稍后,假设您有32 of和16 of交换空间。您可以分配内存限制(docker和jvm堆空间),总和将大于32 be,但小于32GB+16GB (为安全起见)。这种过度配置仅用于处理服务的负载高峰。这些限制仅用于在出现问题时快速失败,并且只有一个服务失败,而不是整个系统失败。

您可以调整一个交换值,以防止过多的交换,并且如果您将-XX:MaxHeapFreeRatio从默认的70降低,您可以告诉jvm更快地将分配的堆空间释放回操作系统。

但从长远来看,您需要一些东西来监控所有服务的内存使用情况("prometheus grafana“?)并重新分配内存限制以适应您的物理限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57767028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档