当前位置: 首页 > 网络应用技术

如何在OpenJDK 8中合理使用容器内存资源

时间:2023-03-06 22:39:27 网络应用技术

  尽管Java应用程序容器已经更好地解决了可移植问题,但也存在一些坚定的情况,例如JDK的低版本(低于Java 8U131),无法识别CGROUP资源的限制。主机的CPU和内存。一旦集装箱的使用资源超过限制,它将被Docker杀死。

  在Kubernetes中,我们将在YAML文件中显示CPU,内存请求和限制。我们希望容器中的JVM进程可以自动识别CGroup资源限制,获取正确的内存和CPU信息以动态调整自身。

  以下操作在4C 16G服务器上执行。

  JDK版本小于8U131 JVM。CGROUP资源限制将自动识别。您需要手动设置初始堆尺寸和最大堆尺寸。

  可以看出,未配置JVM参数,并且无法正确识别CGROUP资源的限制。

  配置JVM参数配置,然后达到我们想要的结果

  从8U131版本的支持和这两个选项,用作JVM堆大小的大小用于控制实际可用的内存量。例如,如果将其设置为1,则全部为3,等等

  |maxramfraction值|封装比率|容器内存= 1G |容器内存= 2G |容器内存= 4G |容器内存= 8G |容器内存= 16G ||:---:--- |: - :| :: |:| :: |:| :: |:|:|:|: - |: - |: - |: - |: - |: - :|: - |: - |: - |: - |: -:|:---- |: - |:---:|:---- |1 |1 |1 |1 |≈90%|910.50m |1.78G |3.56克|7.11g |14.22g ||2 |≈50%|455.50m |910.50m |1.78G |3.56克|7.11g ||333%|304.00 |304.00m |608.00m |1.19g |2.37g |4.74G ||4 |≈25%|228.00m |455.50m |910.50m |1.78G |3.56克|

  可以看出,未配置JVM参数,并且无法正确识别CGROUP资源的限制。

  配置JVM参数配置,然后达到我们想要的结果

  从8U191开始,引入了Java10+上的选项,并且默认情况下打开它,没有设置。在同一时间,这是放弃的。不建议继续使用它。同时,它还可以控制JVM的内存比率更细致地通过这些参数。例如,某些Java程序将调用外部进程并申请本机内存,因此,即使您在容器中运行Java程序,您必须为系统保留一些内存。因此,您不能配置太多。

  如果您不配置JVM参数而无需添加任何JVM参数,则可以正确识别Cgroup资源限制

  配置JVM参数VM设置:最大。堆尺寸(估计):1.78G ERICS机器类:使用VM的服务器:OpenJDK 64位服务器VM

  OpenJDK版本“ 1.8.0_191” OpenJDK运行时环境(ICECEDTEA 3.10.0)(Alpine 8.191.12-R0)OpenJDK 64位服务器VM(构建25.191-B12,混合模式)

  本文最初是由猪牙鱼技术团队创建的

  关于猪牙鱼

  Pig Fish Choerodon的整个场景效应平台提供系统化方法论和协作,测试,DevOps和容器工具,以帮助企业通过需求,设计,开发,部署,测试和操作流程,并提高管理效率和质量一步。从平台工具到系统的方法论,猪肉鱼类的团队协调链,全面满足协作管理和工程效率的需求,贯穿到末端 - 到末端流程,从而帮助团队的效率更快,更强,更稳定。