K8S容器内存限额及JVM参数配置

在Java虚拟机(JVM)中,有三种非堆内存,分别是metaspace、code_cache和non-heap。默认情况下,非堆内存总占用内存在400M左右,设置容器内存限额时,参考公式: 内存限额 = 非堆内存(400M) + 堆内存(1200M) + 系统内存(200M) / 80% ,其中80%为内存告警线 ,计算之后约为2250M

  • Metaspace:是Java 8中新增的永久代替代方案,用于存储类的元数据信息。它的大小不是固定的,而是根据需要动态增长。它的扩展是通过操作系统的虚拟内存实现的。Metaspace大小可以通过JVM参数进行调整。
    -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m

  • Code Cache:Code Cache是存储已编译代码的区域。当Java源代码被编译成字节码后,JIT编译器将其翻译成机器代码并缓存到Code Cache中,以便在以后的执行中更快地执行。Code Cache大小可以通过JVM参数进行配置和调整。
    -XX:InitialCodeCacheSize:代码缓存区的初始大小。
    -XX:ReservedCodeCacheSize:代码缓存区的保留大小。
    -XX:MaxCodeCacheSize:代码缓存区的最大大小。
    -XX:InitialCodeCacheSize=32m -XX:ReservedCodeCacheSize=4m -XX:MaxCodeCacheSize=64m

  • Non-heap:非堆内存是指在JVM中管理的内存区域,不是Java堆。这个区域包括被JVM使用的诸如线程栈、本地方法栈、直接内存等的内存区域。Non-heap内存大小也可以通过JVM参数进行配置和调整。
    -XX:ThreadStackSize=256k -XX:MaxDirectMemorySize=128m -XX:MaxPermSize=512m

示例:
内存示例

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐