有一台 8G 内存的实例,剩余内存还很多(7G 左右),而 java 程序使用了 4G 内存申请,直接抛出 OOM。
遇到的相同情况,排查如下
oom 的记录显示为申请 4g 内存失败。
4294967296/1024/1024=4096M
HugePages_Total为 0说明没有设置 nr_hugepage。
MemAvailable: 7418172kB说明这么多内存可用。
使用 java 命令,去申请超出我的测试机物理内存尝试,拿到报错。
资料来源:电子书《ECS运维指南之Linux系统诊断》,下载链接:https://developer.aliyun.com/topic/download?id=143
遇到的相同情况,排查如下
oom 的记录显示为申请 4g 内存失败。
4294967296/1024/1024=4096M
1、第一反应是想起来之前的vm.min_free_kbytes&nr_hugepage导致的free大于available的情况有关。
2、free –m && sysctl –p && /proc/meminfo 等信息分析问题。
HugePages_Total为 0说明没有设置 nr_hugepage。
MemAvailable: 7418172kB说明这么多内存可用。
3、实际上面的 meminfo 已经说明了问题,但是由于经验不足,一时没有看明白怎么回事,尝试自行测试。
使用 java 命令,去申请超出我的测试机物理内存尝试,拿到报错。
4、java 测试证明正常申请内存不会有问题,超额的内存才会 oom,那么为什么超额呢,视线回归到 sysctl -p 有所发现。
5、两相对照,说明客户设置的 vm.overcommit_memory 在生效,建议改回 0 再试试。
资料来源:电子书《ECS运维指南之Linux系统诊断》,下载链接:https://developer.aliyun.com/topic/download?id=143
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。