Java Spring boot微服务在docker swarm中消耗大量内存
我有一些docker swarm容器在Azure上的Ubuntu 16.04.4 LTS实例上运行。这些容器运行Java Spring Boot和Netflix OSS应用程序,如Eureka、Ribbon、Gateway等应用程序。我发现我的容器占用了巨大的内存,尽管服务只是REST端点 我试图通过如下传递JavaVM参数来限制内存消耗,但这并没有起到任何作用,即使在以后也没有改变大小 请注意我在这里使用的以下配置 Java版本:Java8 内核版本:4.15.0-1023-azure 操作系统:Ubuntu 16.04.4 LTS OSType:linux 架构:x86_64 CPU:32 总内存:125.9GiB docker统计数据之后的内存占用 Java虚拟机参数Java Spring boot微服务在docker swarm中消耗大量内存,java,spring-boot,java-8,microservices,docker-swarm,Java,Spring Boot,Java 8,Microservices,Docker Swarm,我有一些docker swarm容器在Azure上的Ubuntu 16.04.4 LTS实例上运行。这些容器运行Java Spring Boot和Netflix OSS应用程序,如Eureka、Ribbon、Gateway等应用程序。我发现我的容器占用了巨大的内存,尽管服务只是REST端点 我试图通过如下传递JavaVM参数来限制内存消耗,但这并没有起到任何作用,即使在以后也没有改变大小 请注意我在这里使用的以下配置 Java版本:Java8 内核版本:4.15.0-1023-azure 操作系
docker service create --name xxxxxx-service --replicas 1 --network overnet 127.0.0.1:5000/xxxxxx-service --env JAVA_OPTS="-Xms16m -Xmx32m -XX:MaxMetaspaceSize=48m -XX:CompressedClassSpaceSize=8m -Xss256k -Xmn8m -XX:InitialCodeCacheSize=4m -XX:ReservedCodeCacheSize=8m -XX:MaxDirectMemorySize=16m -XX:+UseCGroupMemoryLimitForHeap -XX:-ShrinkHeapInSteps -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=70"
我还尝试查看了每个容器中的应用程序日志文件,但没有发现任何与内存相关的错误。我还试图限制容器资源。但这对我也不起作用
有什么线索可以帮助我解决这个严重的内存问题吗?您可以使用visualvm或jprofiler之类的探查器来解决这个问题,它们会告诉您内存的分配位置(对象的类型等)
不过,如果可能的话,您不应该在生产系统上使用它,因为评测可能会占用大量CPU。另一种了解我过去使用过的更多信息的方法是添加特殊代码,将内存信息添加到日志文件中。 这也会减慢你的系统速度,但是当你的方面写得很好的时候,不要使用一个概要文件
如果可能的话,更倾向于分析-如果不是的话,AspectJ加载时间编织可能会有所帮助。您可以尝试启用执行器,并将内存消耗值与docker stats生成的值进行比较 要启用执行器,可以在pom.xml文件中添加以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
通过这种方式,您可以监视应用程序的内存性能,并找出应用程序实际消耗的内存量。如果这与docker生成的报告类似,那么这就是代码的问题
然而,我必须声明,致动器的使用不利于生产,因为它本身有大量的资源开销 谢谢你的评论,但正如我前面提到的,这些都是基本的REST端点,如果我在本地运行它,只需要150到200 MBs就可以了。但是,只有当我部署到Docker容器时,这个问题才会出现。请建议。我已经用visualvm检查过了,但是如果我在本地运行它,它不会占用超过200 MB的空间。但是,只有当您将它部署到Docker上时,问题才会出现,它会增长到大约5-6GB的完整内存分配
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
{
"mem" : 193024,
"mem.free" : 87693,
"processors" : 4,
"instance.uptime" : 305027,
"uptime" : 307077,
"systemload.average" : 0.11,
"heap.committed" : 193024,
"heap.init" : 124928,
"heap.used" : 105330,
"heap" : 1764352,
"threads.peak" : 22,
"threads.daemon" : 19,
"threads" : 22,
"classes" : 5819,
"classes.loaded" : 5819,
"classes.unloaded" : 0,
"gc.ps_scavenge.count" : 7,
"gc.ps_scavenge.time" : 54,
"gc.ps_marksweep.count" : 1,
"gc.ps_marksweep.time" : 44,
"httpsessions.max" : -1,
"httpsessions.active" : 0,
"counter.status.200.root" : 1,
"gauge.response.root" : 37.0
}