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
示例
: