知识卡片
CPU可压缩与内存不可压缩决定资源配置策略
内容
给容器配置资源上限时,CPU 和内存该用什么策略,取决于它们在超限时的行为完全不同。CPU 是可压缩资源:用量触顶后(不管是撞到 limit 还是节点本身 CPU 不够)操作系统会限流,进程还能继续跑,只是变慢,所以给 CPU 设置一个较低的 request(保证正常运行的最低配额)、limit 可以设得更高甚至不设,让应用在启动这种需要瞬时算力冲高的阶段能吃到更多 CPU,代价是可以接受的性能损失。内存是不可压缩资源:用量触顶没有任何缓冲余地,JVM 应用会直接抛 OutOfMemoryError,操作系统会把整个容器进程杀掉(OOMKilled),没有”降级运行”这个选项,所以内存的 request 和 limit 必须设成同一个值,才能保证容器拿到的内存量是固定且可预期的,JVM 堆内存的分配又高度依赖这个固定值来做优化,动态伸缩的内存反而会拖累性能。发散:这是”资源超限后果的可逆性”决定配置策略的一个具体案例——能优雅降级的资源可以留弹性空间搏性能,一旦超限就是硬崩溃的资源必须锁死配置换稳定性。
参考来源
《Cloud Native Spring in Action》第15章《Continuous delivery and GitOps》