针对 Java 容器因 JNI 内存和 glibc 内存管理导致的 OOM,有以下解决方案:
调整 C2 Compiler 参数:让编译策略更保守,减少 JIT 预热过程中的内存申请。可以调整编译阈值、限制编译线程数等参数,观察内存消耗变化。
调整 glibc 环境变量:设置 MALLOC_TRIM_THRESHOLD_ 让 glibc 及时将内存释放回操作系统,减少内存片段的积累。
更换内存分配器:考虑使用 jemalloc 或 tcmalloc 替代 glibc 默认的 ptmalloc,这些分配器在多线程场景下内存片段更少。
关闭透明大页:如果 THP 导致内存浪费显著,可通过内核参数关闭。
合理设置容器 memory limit:在 JVM 堆内存基础上预留足够的 headroom 给堆外内存、JNI 内存和 OS 层开销。




