OOM,out of memory,就是内存用完了耗尽了的意思。会触发kernel调用OOM killer杀进程来解除这种状况。
OOM分为虚拟内存OOM和物理内存OOM,两者是不一样的。
虚拟内存OOM发生在用户空间,用户空间分配的就是虚拟内存,不能分配物理内存,用户空间虚拟内存OOM表现为malloc、mmap等内存分配接口返回失败,错误码为ENOMEM。
程序在运行的时候触发缺页异常从而需要分配物理内存,kernel 自身在运行的时候也需要分配物理内存,如果此时物理内存不足了,就会发生物理内存OOM。
OOM是非常严重的问题,那我们如何监控、告警、甚至自愈呢?
1、采用 node_export + grafna + prometheus + alertmanager 监控
1.1、node_export 监控数据采集 --collector.vmstat
/opt/exporter/bin/node_exporter_51233 --web.listen-address=0.0.0.0:51233 --collector.cpu.info --collector.arp --collector.cpu --collector.diskstats --collector.filesystem --collector.loadavg --collector.meminfo --collector.mountstats --collector.nfs --collector.stat --collector.tcpstat --collector.vmstat
1.2、grafna 中写PromQL 制定 OOM 可视化
-- oom 频率increase(node_vmstat_oom_kill{host=~"$host"}[1m])
-

文章介绍了如何处理Linux系统的OOM(OutofMemory)问题,包括使用node_exporter、grafana、prometheus和alertmanager进行监控和告警设置,以及通过systemd服务配置实现系统的自动恢复。通过监控OOM频率和总次数,设置告警阈值,并利用systemd的RestartPreventExitStatus参数控制服务重启策略,以确保系统稳定运行。
最低0.47元/天 解锁文章
2766

被折叠的 条评论
为什么被折叠?



