【问题标题】:Spring Cloud microservices memory usageSpring Cloud 微服务内存使用情况
【发布时间】:2016-12-09 09:46:25
【问题描述】:

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

我试图通过以下方式限制这些容器可以使用的内存量:

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

此时我的服务(标准 spring 云服务,具有一个单一端点,使用 spring-data-redis 将内容写入 Redis DB)甚至没有启动。

将内存增加到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)
  • 码头工人
  • Spring 数据 Redis 1.7.1

这样简单的服务为什么要使用这么多内存来运行是有原因的吗?我应该禁用哪些功能来改进它?

【问题讨论】:

  • +1 我也遇到了类似的行为。我正在运行一系列运行 Spring Cloud 的微服务,使用 Brixton.RC1,并在 docker 容器中运行(在 docker 1.12 swarm-mode 中运行)。我的容器使用了 800mb 以上的内存。我编辑了我的 Dockerfile 基础镜像,所以它使用 FROM java:8-jre-alpine 而不是我最初使用的非高山 JDK 基础镜像......但这并没有太大帮助。有人有其他想法吗?
  • 我还在我的 RHEL 机器上运行了相同的容器,其中 docker 1.12 和我的个人 Mac 上运行了 Docker for Mac 1.12 beta 21。 RHEL 盒子上的容器使用了大约 800mb 的内存,而我的 mac 上的容器只使用了 350mb 的内存。两个容器都是使用相同的 docker run 命令启动的。
  • +1。 spring 和 docker 也有同样的问题。在我的服务中,我使用 Hibernate、Spring Data REST、Spring Security、jackson 等。所有这些都消耗超过 350mb-500mb 并且有时会崩溃,尽管它们不会被使用。我认为微服务应该是轻量级的。但是有了这种内存使用......

标签: performance memory docker spring-cloud


【解决方案1】:

我们已经在 J​​VM 本身的类似设置中调查了许多事情。如果使用 Java 8,一种快速节省内存的方法是使用以下选项:

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

G1GC 有据可查,UseStringDeduplication 通过对堆中字符串的存储进行重复数据删除来减少堆使用(我们在 JSON/XML Web 服务类型环境中发现大约 20%),TieredCompilation 在使用 CodeCache(从 70Mb 降低到 10Mb),以及以大约 10% 的启动时间为代价减少大约 10% 的元空间。

【讨论】:

    【解决方案2】:

    根据 Spring 的Installing Spring Boot applications page,您可以通过环境变量或带有 JAVA_OPTS 变量的配置文件来自定义应用程序启动脚本。

    例如:JAVA_OPTS=-Xmx64m

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2018-03-28
      • 2019-03-22
      • 2018-04-18
      • 2016-02-04
      • 2019-10-21
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多