• laozhou

    现象:容器内存限制 2G,Java 服务跑着跑着就被 kill,日志里只有 exit code 137。

    排查过程:

    • docker stats 看到内存一路涨到 2G 然后归零
    • 宿主机 free 还有富余,不是物理内存不够
    • jmap 看堆只有 700M

    原因:JVM 默认按宿主机内存算堆大小,容器里它看到的是宿主机的 32G,于是 Xmx 默认给到 8G。堆没涨到那么多,但加上元空间、线程栈、直接内存,超了容器的 2G。

    解法:加 -XX:MaxRAMPercentage=70,或者显式 -Xmx1200m。JDK 10 以后 cgroup 一般是认的,但有些基础镜像的 JVM 参数文件会覆盖掉自动探测。

    顺手加了个启动时打印内存参数的日志,以后一眼能看出来。这个问题折腾了两天,教训是:容器里跑 JVM,内存参数一定要显式写。

    主楼
  • daxiong

    支持这个观点,工具描述比模型选择重要。

    #1
  • yehang

    看完去改了我的 CLAUDE.md,确实清晰多了。

    #2
  • yehang

    有没有人试过在 ARM 机器上跑,性能差多少?

    #3

发表回复

登录后回复