Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java K8容器编排:JVM未释放内存_Java_Performance_Kubernetes_Microservices_Heap Dump - Fatal编程技术网

Java K8容器编排:JVM未释放内存

Java K8容器编排:JVM未释放内存,java,performance,kubernetes,microservices,heap-dump,Java,Performance,Kubernetes,Microservices,Heap Dump,我们有基于java的微服务。当这些微服务不提供任何请求时,微服务的每个pod使用大约270MB。我们将每个微服务的内存限制保持为512Mi 我在一些微服务上做了一些负载测试。对于一个微服务,我每秒发出20个API请求。另一方面,每秒30个请求。 我观察到的一个一致的模式是:内存利用率随着负载的增加而增加,并且在负载测试之后内存不会被释放(当然,除非容器被终止)。 一旦我完成负载测试,我会等待一个小时左右。然而,内存利用率并没有下降。pod继续占用与以前相同的内存量。 我在这样一个pod的容器中也

我们有基于java的微服务。当这些微服务不提供任何请求时,微服务的每个pod使用大约270MB。我们将每个微服务的内存限制保持为512Mi

我在一些微服务上做了一些负载测试。对于一个微服务,我每秒发出20个API请求。另一方面,每秒30个请求。
我观察到的一个一致的模式是:内存利用率随着负载的增加而增加,并且在负载测试之后内存不会被释放(当然,除非容器被终止)。
一旦我完成负载测试,我会等待一个小时左右。然而,内存利用率并没有下降。pod继续占用与以前相同的内存量。
我在这样一个pod的容器中也得到了一个shell,我只能看到
java进程
sh进程
正在运行。事实上,我看到pod的内存使用量增加到了360MB左右

因此,一个pod通常需要270MB(在没有任何负载测试的情况下),在负载测试下需要360MB(每秒30个API请求),并且在负载测试完成后很长时间内继续使用360MB

我不明白为什么吊舱的使用率没有下降

可能是:

  • JVM堆使用问题,可能没有进行垃圾收集
  • 与Kubernetes吊舱请求和限制设置相关的内容
  • 以下是我对Kubernetes吊舱的要求和限制:

      resources:
        limits:
          memory: 512Mi
          cpu: '0.5'
        requests:
          memory: 256Mi
          cpu: '0.1'
    
    顺便说一下,我正在使用ApacheJMeter进行API负载测试。 正在使用的Docker映像是:
    openjdk:8-alpine

    我还下载了堆转储并在Eclipse内存分析器工具中打开了它 但是,我没有看到任何应用程序类(从我们的代码中)使用大量堆。
    我只看到与JDK和Spring框架相关的类,它们没有显示任何内存泄漏

    所以,对我来说,谜团是:为什么在负载测试后2-3小时内存使用率都没有下降?
    是请求和限制的Kubernetes配置还是JVM GC设置调优?
    JVM GC设置是否可能不能很好地处理Kubernetes请求和内存限制

    添加JVM详细信息以供参考:

    openjdk version "1.8.0_212"
    OpenJDK Runtime Environment (IcedTea 3.12.0) (Alpine 8.212.04-r0)
    OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
    

    请添加有关您正在使用的特定JVM的信息。@ThorbjørnRavnAndersen,已编辑了我的问题并添加了JVM详细信息这是Java新版本的重点领域。我建议您尝试迁移到Java11。我在这方面做了更多的研究。事实上,OpenJDK 12和Eclipse OpenJ9虚拟机解决了上述问题。我会在以后的某个时候给我自己的问题写一个详细的答案。@ChetanYewale-你有没有在任何地方写下导致这个问题的原因?我也面临同样的问题。