加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

性能 – Spring Cloud微服务内存使用情况

发布时间:2020-12-16 03:27:03 所属栏目:安全 来源:网络整理
导读:我在AWS上的小型/中型机器上运行多个微服务(Spring cloud docker),最近我发现这些机器经常耗尽并需要重新启动. 我正在研究这种断电的原因,考虑可能的内存泄漏或实例/容器上的错误配置. 我试图通过这样做来限制这些容器可以使用的内存量: docker run -m 500M

我在AWS上的小型/中型机器上运行多个微服务(Spring cloud docker),最近我发现这些机器经常耗尽并需要重新启动.
我正在研究这种断电的原因,考虑可能的内存泄漏或实例/容器上的错误配置.

我试图通过这样做来限制这些容器可以使用的内存量:

docker run -m 500M --memory-swap 500M -d my-service:latest

此时,我的服务(带有一个单一端点的标准Spring云服务,使用spring-data-redis将内容写入Redis数据库)甚至都没有启动.

将内存增加到760M并且工作正常,但是使用docker监控它我发现最小值是:

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O             PIDS
cd5f64aa371e        0.18%               606.9 MiB / 762.9 MiB   79.55%              102.4 MB / 99 MB    1.012 MB / 4.153 MB   60

我添加了一些参数来限制JVM内存堆,但它似乎并没有减少它:

_JAVA_OPTIONS: "-Xms8m -Xss256k -Xmx512m"

我在跑

> Spring Cloud Brixton.M5
> Spring Boot 1.3.2
> Java 8(Oracle JVM)
> Docker
> Spring数据Redis 1.7.1

有这么简单的服务使用如此多的内存来运行的原因吗?是否有任何我应该禁用的功能来改进它?

最佳答案
我们根据JVM本身研究了类似设置中的许多内容.如果使用Java 8,快速保存内存的方法是使用以下选项:

-Xms256m -Xmx512m -XX:-TieredCompilation -Xss256k -XX:+UseG1GC -XX:+UseStringDeduplication

G1GC已有详细记录,UseStringDeduplication通过在堆中重复删除Strings的存储来减少堆使用(我们在JSON / XML Web服务类型环境中发现大约20%),并且TieredCompilation在使用中有很大的不同CodeCache(从70Mb到10Mb),以及大约10%的Metaspace,以大约10%的启动时间为代价.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读