首页/系统/Linux 内核与性能调优速查/内存分配失败的分层排查
内存与 OOM58 条

内存分配失败的分层排查

ENOMEM/EAGAIN 报错按层排查:进程地址空间限制(ulimit -v)→ cgroup 限额 → overcommit 模式 → max_map_count → 碎片/大页。

第一层ulimit -v / /proc/<pid>/limits
第二层cgroup memory.max / pids.max
第三层overcommit 模式与 CommitLimit
第四层vm.max_map_count、碎片

排查命令

排查命令
ulimit -v; grep -i 'address' /proc/<pid>/limits
grep -E 'CommitLimit|Committed_AS' /proc/meminfo
sysctl vm.overcommit_memory vm.max_map_count
cat /sys/fs/cgroup/<组>/memory.max 2>/dev/null

易错点

  • 报错点在应用层但根因常在限额层,先纵向核对照各层阈值再改应用
  • 部分应用官方建议调 overcommit 模式(如内存数据库),变更前阅读其部署文档并评估全局影响

数据来源与参考

  • Linux 内核 Documentation/mm/overcommit-accounting.rst
  • man-pages mmap(2)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌