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

文章介绍了在K8S容器中,针对Java应用设置内存限额的方法,包括考虑JVM的Metaspace、CodeCache和非堆内存部分。Metaspace作为Java8的永久代替代,其大小可动态调整;CodeCache存储编译后的代码;非堆内存涉及线程栈和直接内存等。内存限额计算公式为:内存限额=非堆内存+堆内存+系统内存/80%。文章还提到了相关JVM参数的配置示例。

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

示例:
内存示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬山境KL攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值