前几天开发一个功能 主要是转发数据的 然后一开始也没压测 当时想的发送的数据没有多少qps 但是到领导那里需要压测报告所有又当了一次测试
测试 8个 kafka 数据 发送打满 大概总qps 2400多 cpu 占用 400% 基本满了 因为是容器 设定 4 核心 但是发现 内存疯狂增长 几秒就oom了 被容器杀死了,查看堆内内错发现GC健康 而且 老年代 基本都没怎用 为什么还会oom 然后就开启了漫长的gc日志查看 哎都是泪啊
突然灵光一闪 哎 java 的内存除了堆内还一堆堆外 然后一看 真的因为堆外 哎一言难进 所以java 不知道自己在容器中
目前临时解决 方案 java 设置堆内。内存 占用别超过容器内存的0.75 官方建议 然后 将原空间 直接内存都限制住 也别超过 0.9 剩下的 0.1 就留给其他java 内存空间 哎 附上我的 一些 参数 仅供参考 4g内存:
-Xmx3072m -Xms3072m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m -XX:MaxDirectMemorySize=128m