【问题标题】:Sspring-boot app in docker container consumes high CPU without being useddocker容器中的spring-boot应用程序在不使用的情况下消耗高CPU
【发布时间】:2018-10-15 16:10:22
【问题描述】:

我有一个非常奇怪的问题。我有一个在 docker 容器中运行的 java web 应用程序(spring boot 1.5)。

在某些时候,应用开始大量消耗 CPU。 所以我在想这个应用程序本身有某种错误。

但是

如果我从负载均衡器中删除该应用程序,因此它将不接受任何连接,该应用程序将继续消耗大量 CPU,即使它根本没有被访问。

我继续在日志文件中看到来自应用程序的大量 GC 日志条目。 似乎 JVM 继续每 300 毫秒在 Young gen 上运行一次 GC,即使应用程序应该完全空闲(并且它是空闲的,因为日志文件中没有任何内容)!

应用程序本身只是一个使用 Spring Boot 的网站。那里没有什么特别的(没有计划任务或其他什么)。

知道这里会发生什么吗?会不会是docker相关的?

提前致谢

【问题讨论】:

  • 您是否为您的应用程序设置了最小和最大 java 内存标志?如果其他应用程序正在运行,则您的应用程序可能内存不足 -> GG 清理的次数超出了应有的范围。
  • 是的,我做到了。我尝试了 2 和 4GB 之间的不同配置。行为相同。我只设置了xmx 的想法。该应用程序甚至没有全部使用它
  • 能否请您粘贴 docker-compose 文件或 docker run 命令?
  • 类似这样的东西 docker run -it -p 11099:1099 -v /tmp:/logs -v /tmp:/tmp registry:5000/java-jre:8 java -Dserver.port=9999 -Xmx2g \ -jar /tmp/app-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/application.properties,classpath:/application-prod.properties

标签: java docker spring-boot garbage-collection


【解决方案1】:

好的, 事实证明,这与 docker 无关。是应用程序中的一个错误,创建了许多(不必要的)需要 GC 的短期对象。

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 2018-07-12
    • 2018-07-11
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    相关资源
    最近更新 更多