同一 Java 应用从线下 IDC 迁移到云上 ACK 后内存行为变化的主要原因:
容器 cgroup 内存计账:线下环境中,进程内存占用只要不超过物理内存就不会被杀死。但容器化后,cgroup 会严格按 memory limit 计账,超出就触发 OOMKilled。
OS 版本差异:不同 Linux 内核版本的 THP 策略、内存回收机制可能不同,导致内存占用模式突变。
glibc 版本差异:不同基础镜像的 glibc 版本可能对 ptmalloc 的 Arena 数量、释放策略等有调整,影响内存片段程度。
共享资源变化:线下环境多个服务可能共享同一台机器的物理内存,互相补偿。容器化后每个 Pod 有严格隔离的内存配额,没有缓冲空间。
因此迁移后需要重新评估内存配额,并借助 SysOM 等工具定位非 JVM 内存开销。




