linux OOM Killer 深度监控:进程、cgroup 和 namespace 配置

📊 OOM Killer 深度监控:进程、cgroup 和 namespace 配置

🔍查看 OOM Killer 详细信息

1.查看 OOM 杀死的历史记录

# 查看内核环形缓冲区中的 OOM 详细日志sudodmesg-T|grep-A30-B5"Out of memory"# 使用专门的 OOM 日志分析工具sudojournalctl -k --grep="oom\|out.of.memory"--since="24 hours ago"# 查看被杀死进程的详细信息sudogrep-i"killed process"/var/log/messages|tail-20# 更详细的 OOM 信息(包含内存统计)sudojournalctl -k|grep-i"oom_kill_process"-A10

2.查看当前内存压力状态

# 查看内存压力状态cat/proc/pressure/memory# 监控内存压力变化watch-n1'cat /proc/pressure/memory'# 查看每个 NUMA 节点的内存统计cat/proc/zoneinfo|grep-A5"Node"# 查看页面分配失败统计(OOM 前兆)cat/proc/vmstat|grep-E"allocstall|pgalloc_dma"

📁进程级别的 OOM 配置查看

1.查看单个进程的 OOM 配置

# 查看指定进程的所有 OOM 相关文件ls-la /proc/<PID>/oom_*# 查看 OOM 分数(越高越容易被杀)cat/proc/<PID>/oom_score# 查看 OOM 调整值(范围:-1000 到 +1000)cat/proc/<PID>/oom_score_adj# 查看进程的内存使用情况cat/proc/<PID>/status|grep-A10-E"Vm"# 查看进程的内存映射cat/proc/<PID>/maps

2.批量查看所有进程的 OOM 分数

# 查看所有进程的 OOM 分数和内存使用forpidin$(ps-eo pid|grep-v PID);doif[-f /proc/$pid/oom_score];thenoom_score=$(cat/proc/$pid/oom_score2>/dev/null)oom_adj=$(cat/proc/$pid/oom_score_adj2>/dev/null)cmd=$(ps-p $pid -ocomm=2>/dev/null)echo"PID:$pid, CMD:$cmd, OOM Score:$oom_score, OOM Adj:$oom_adj"fidone|sort-k6 -rn|head-20# 更简洁的版本ps-eo pid,comm,%mem --sort=-%mem|head-10|whilereadpid cmd mem;do[-f /proc/$pid/oom_score]&&\echo"PID:$pid, CMD:$cmd, MEM:$mem%, OOM:$(cat/proc/$pid/oom_score)"done

🏗️Cgroup 相关的 OOM 配置

1.Cgroup v1(CentOS 7 默认)

# 查看 cgroup 内存配置ls-la /sys/fs/cgroup/memory/# 查看系统所有 memory cgroupfind/sys/fs/cgroup/memory -name"memory.*"-type f|head-20# 查看特定 cgroup 的内存限制cat/sys/fs/cgroup/memory/memory.limit_in_bytescat/sys/fs/cgroup/memory/memory.usage_in_bytes# 查看 cgroup 的 OOM 控制cat/sys/fs/cgroup/memory/memory.oom_control# oom_kill_disable 0 = 允许 OOM Killer,1 = 禁用# under_oom 0 = 没有 OOM,1 = 处于 OOM 状态# 查看 cgroup 的内存统计cat/sys/fs/cgroup/memory/memory.stat# 查看哪个 cgroup 发生了 OOMsudodmesg|grep-i"oom_kill"|grep-o"cgroup.*"

2.Cgroup v2(如果启用)

# 查看 cgroup v2 挂载点mount|grepcgroup2# 查看 cgroup v2 内存配置ls-la /sys/fs/cgroup/# 查看当前进程所在的 cgroupcat/proc/self/cgroup# 查看 cgroup 的内存限制和当前使用cat/sys/fs/cgroup/memory.maxcat/sys/fs/cgroup/memory.current# 查看内存压力cat/sys/fs/cgroup/memory.pressure

3.Docker 容器的 OOM 配置

# 查看 Docker 容器的内存限制dockerinspect<container_id>|grep-i memory# 查看容器的 cgroup 路径dockerinspect<container_id>|grepCgroup# 查看容器的 OOM 事件dockerevents --filter'event=oom'--since'24h'# 查看容器内进程的 OOM 状态dockerstats --no-stream# 进入容器的 cgroup 查看详细配置CONTAINER_ID=<your_container_id>CGROUP_PATH=$(dockerinspect $CONTAINER_ID|grepCgroup|cut-d'"'-f4)ls-la /sys/fs/cgroup/memory/docker/$CGROUP_PATH/

🌐Namespace 相关的内存隔离

1.查看进程的 Namespace 信息

# 查看进程的 namespace IDls-la /proc/<PID>/ns/# 查看进程所在的各个 namespacereadlink /proc/<PID>/ns/mnt readlink /proc/<PID>/ns/pid readlink /proc/<PID>/ns/net readlink /proc/<PID>/ns/ipc readlink /proc/<PID>/ns/uts readlink /proc/<PID>/ns/user# 查看进程的 Mount namespace 中的内存文件系统findmnt -N<PID>

2.查看 Namespace 中的内存配置

# 查看特定 namespace 中的内存信息nsenter -t<PID>-mfree-h# 进入容器的 namespace 查看内存nsenter -t<PID>-m -pcat/proc/meminfo# 查看不同 namespace 中的内存压力nsenter -t<PID>-mcat/proc/pressure/memory

🔧高级诊断工具

1.使用 systemd-cgtop 监控 cgroup

# 按内存使用排序查看 cgroupsystemd-cgtop --order=memory# 实时监控 cgroup 内存变化watch-n1systemd-cgtop --order=memory

2.使用 cgroup-tools

# 安装 cgroup 工具yuminstalllibcgroup libcgroup-tools# 查看所有 cgroup 子系统lssubsys -am# 查看特定进程的 cgroupcat/proc/<PID>/cgroup# 查看 cgroup 配置cgget -r memory<cgroup_path>

3.自定义 OOM 监控脚本

#!/bin/bash# oom-monitor.sh# 监控 OOM 事件echo"=== OOM Killer 监控 ==="echo"1. 查看最近 OOM 事件:"journalctl -k --since="1 hour ago"|grep-i"oom\|killed"|tail-5echo-e"\n2. 内存使用前10的进程:"ps-eo pid,ppid,cmd,%mem,%cpu --sort=-%mem|head-11echo-e"\n3. Cgroup 内存使用:"forcgin$(find/sys/fs/cgroup/memory -name"memory.usage_in_bytes");dousage=$(cat$cg)limit_file=$(echo$cg|sed's/usage_in_bytes/limit_in_bytes/')if[-f$limit_file];thenlimit=$(cat$limit_file)if[$limit-ne9223372036854775807];thenusage_mb=$((usage/1024/1024))limit_mb=$((limit/1024/1024))echo"Cgroup:$(dirname$cg), Usage:${usage_mb}MB, Limit:${limit_mb}MB"fifidone|head-10echo-e"\n4. 内存压力状态:"cat/proc/pressure/memory

📊实战:分析 OOM 事件

1.完整 OOM 事件分析流程

# 步骤1: 查找最近的 OOM 事件OOM_LOG=$(sudojournalctl -k|grep-B5 -A15"Out of memory"|tail-30)echo"$OOM_LOG"# 步骤2: 提取被杀死的进程信息KILLED_PID=$(echo"$OOM_LOG"|grep"Killed process"|grep-o"pid [0-9]*"|awk'{print $2}')if[!-z"$KILLED_PID"];then# 步骤3: 查看进程的 cgroupecho"进程$KILLED_PID的 cgroup:"cat/proc/$KILLED_PID/cgroup# 步骤4: 查看进程的内存使用历史if[-d /proc/$KILLED_PID];thenecho"进程内存状态:"cat/proc/$KILLED_PID/status|grep-E"Vm|Rss"fi# 步骤5: 查看进程的 OOM 配置echo"OOM 配置:"cat/proc/$KILLED_PID/oom_scorecat/proc/$KILLED_PID/oom_score_adjfi

2.Cgroup OOM 分析

#!/bin/bash# analyze-cgroup-oom.sh# 查找发生过 OOM 的 cgroupecho"查找发生过 OOM 的 cgroup:"find/sys/fs/cgroup/memory -name"memory.oom_control"|whilereadfile;dounder_oom=$(grep"under_oom"$file|awk'{print $2}')if["$under_oom"=="1"];thencgroup=$(dirname$file)echo"Cgroup$cgroup处于 OOM 状态"echo" 内存使用:$(cat$cgroup/memory.usage_in_bytes)bytes"echo" 内存限制:$(cat$cgroup/memory.limit_in_bytes)bytes"fidone

⚙️配置建议和优化

1.保护重要进程

# 为重要进程设置 OOM 保护echo"-1000">/proc/<PID>/oom_score_adj# 对于 systemd 服务[Service]OOMScoreAdjust=-1000MemoryHigh=90%MemoryMax=95%

2.Cgroup 内存限制最佳实践

# 为不同服务设置合理的 cgroup 限制# /etc/systemd/system/myapp.service.d/memory.conf[Service]MemoryLimit=2GMemorySwapMax=1G

3.监控和报警配置

# 在 /etc/crontab 中添加定期检查*/5 * * * * root /usr/local/bin/check-oom-risk.sh# 使用 Prometheus node_exporter 监控# 监控指标: node_memory_OOM_kill, node_memory_pressure

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1195164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态医学数据治理通过标准化整合、安全合规共享与智能分析,打通数据孤岛,为精准医疗、药物研发

多模态医学数据治理通过标准化整合、安全合规共享与智能分析&#xff0c;打通数据孤岛&#xff0c;为精准医疗、药物研发、公共卫生等生物医学领域提供高质量数据底座与决策支撑&#xff0c;是当前生物医学创新的核心驱动力。以下从核心内涵、关键路径、赋能场景、实施要点与挑…

技术实战:用 Python 脚本高效采集与分析手机操作日志

在移动端开发、测试或问题排查场景中&#xff0c;手机操作日志&#xff08;如按键、触控、应用切换、系统事件&#xff09;是定位问题、分析用户行为的核心数据。手动导出日志不仅效率低&#xff0c;还难以实现定制化筛选与实时分析。本文从技术视角&#xff0c;拆解如何基于 P…

2026年研磨仪厂家推荐:组织研磨仪品牌+优质厂家+仪器选购全指南

在现代生物医学研究、药物开发、食品安全检测及农业科学等领域,样品前处理是实验过程中至关重要的一环。其中,组织研磨仪作为样品前处理的核心设备之一,承担着将各类生物样本(如动植物组织、土壤、微生物等)高效、…

互联网大厂Java求职面试实战:从Spring Boot到微服务

互联网大厂Java求职面试实战&#xff1a;从Spring Boot到微服务 场景背景&#xff1a; 超好吃是一位刚毕业的Java程序员&#xff0c;今天他来到一家知名互联网大厂面试。面试官以严肃的态度开始了技术问答&#xff0c;场景设定为共享经济平台的开发。 第一轮提问&#xff1a;…

淋巴造血系统肿瘤MICM(形态学Morphology、免疫学Immunology、细胞遗传学Cytogenetics、分子生物学Molecular Biology)高质量数据集构建

淋巴造血系统肿瘤MICM&#xff08;形态学Morphology、免疫学Immunology、细胞遗传学Cytogenetics、分子生物学Molecular Biology&#xff09;高质量数据集构建&#xff0c;是解决当前血液肿瘤智能诊断数据整合不足、标准不一、标注匮乏等问题的核心路径&#xff0c;需遵循“需求…

ATCC细胞怎么进口?流程、挑战与解决方案探讨

一、行业现状与挑战根据2026年生物医学研究联盟发布的数据,中国已成为全球第二大ATCC细胞进口国,年进口量达到约12万株次。这一数字的背后,反映了中国生物医学研究的蓬勃发展和对标准化研究材料的迫切需求。这种需求…

C++课后习题训练记录Day72

1.练习项目&#xff1a; 问题描述 小蓝和小桥是游戏世界里的两个好友&#xff0c;他们正在玩一个有趣的挑战。他们手中有一个长度为 n 的神秘物品序列&#xff0c;每个物品都有一个数字 ai​ 表示它的价值。他们可以执行以下操作&#xff1a; 选择一个物品&#xff0c;并将其…

常见的Jmeter压测问题

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快根据在之前的压测过程碰到的问题&#xff0c;今天稍微总结总结&#xff0c;以后方便自己查找。一、单台Mac进行压测时候&#xff0c;压测客户端Jmeter启动超过2000个…

AI赋能智能终端PCB设计,核心是通过自动化布局布线、仿真加速、缺陷预测与制造协同

AI赋能智能终端PCB设计&#xff0c;核心是通过自动化布局布线、仿真加速、缺陷预测与制造协同&#xff0c;将传统“经验驱动”转为“数据决策”&#xff0c;显著缩短周期、提升性能与良率&#xff0c;适配高密度、高速、高可靠的终端需求。以下从核心场景、技术路径、实践案例、…

深聊美国ida国际设计奖诚信申报,红典咨询服务全!

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家国际设计奖项申报领域的标杆企业,为企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:深圳市红典咨询有限公司 推荐指数:★★★★★ | 口碑评…

仓库管理系统+JAVA源代码及设计说明,零基础入门到精通,收藏这篇就够了

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本项目介绍了一个使用JAVA编程语言开发的仓库管理系统&#xff0c;其目的是辅助企业管理库存、追踪物资流动&#xff0c;并优化存储空间。系统包括入库管理、出库管理、库存统计、货物查询等核心功能&#xff0c…

Speech Seaco Paraformer跨境电商应用:中文直播实时翻译场景

Speech Seaco Paraformer跨境电商应用&#xff1a;中文直播实时翻译场景 1. 引言&#xff1a;让中文直播触达全球买家 你有没有想过&#xff0c;一场用中文进行的跨境电商直播&#xff0c;能让不懂中文的海外观众也实时看懂内容&#xff1f;这不再是未来设想&#xff0c;而是…

FBM201-P0916AA压缩现场端子模块

FBM201-P0916AA 压缩现场端子模块简介FBM201-P0916AA 是 Foxboro I/A Series 分布式控制系统中使用的压缩型现场端子模块&#xff0c;主要用于连接现场仪表与控制系统&#xff0c;实现信号的可靠传输与集中管理。主要功能特点&#xff1a;用于现场信号与 FBM201 功能模块之间的…

2026年国内出海企业美国卡车运输公司优选指南——聚焦尾程物流痛点与合规解决方案

随着2026年美墨跨境货运需求持续增长,国内大件出海企业对美国本土卡车运输服务的依赖性显著提升。但美国尾程物流市场现存的多重短板,仍让不少企业面临成本失控、运力失衡等难题。本文结合行业现状,为国内出海企业梳…

Qwen3-1.7B从零开始教程:Jupyter+LangChain完整调用流程

Qwen3-1.7B从零开始教程&#xff1a;JupyterLangChain完整调用流程 Qwen3-1.7B是阿里巴巴通义千问系列中的一款轻量级大语言模型&#xff0c;适合在资源有限的环境中进行快速推理和本地部署。它在保持较高语言理解与生成能力的同时&#xff0c;兼顾了响应速度和硬件适配性&…

固原市西吉隆德泾源彭阳原州英语雅思培训辅导机构推荐、2026权威出国雅思课程中心学校口碑排行榜

在全球化教育浪潮下,雅思成绩已成为固原市西吉、隆德、泾源、彭阳、原州等区县学子出国深造的核心门槛,也成为职场人士提升国际竞争力的重要筹码。然而,雅思备考之路布满荆棘,多数考生面临着选课时难以甄别优质教育…

独家披露:大厂都在用的dify长文本预处理方案(索引成功率提升至100%)

第一章&#xff1a;dify 知识库索引失败提示段落过长解决方法 当使用 Dify 构建知识库时&#xff0c;若上传的文档&#xff08;如 PDF、TXT 或 Markdown&#xff09;中存在超长段落&#xff08;例如单一段落超过 2000 字符&#xff09;&#xff0c;Dify 默认的文本分割器&#…

昆明市富民石林禄劝寻甸安宁英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜

在全球化教育交流持续深化的背景下,雅思成绩已成为昆明市富民、石林、禄劝、寻甸、安宁等区域学子申请海外院校的核心“敲门砖”。然而,多数考生在雅思培训备考过程中深陷诸多痛点:优质教育机构资源稀缺且分布不均,…

ue web socket server

ue5.1 web socket server:github地址&#xff1a;https://github.com/h2ogit/UE5-ServerWebSocket/tree/main/ServerWebSockethttps://github.com/h2ogit/UE5-ServerWebSocketLite

Z-Image-Turbo API安全配置:生产环境接口访问控制教程

Z-Image-Turbo API安全配置&#xff1a;生产环境接口访问控制教程 Z-Image-Turbo 是阿里巴巴通义实验室开源的高效AI图像生成模型&#xff0c;作为 Z-Image 的蒸馏版本&#xff0c;它以极快的生成速度&#xff08;仅需8步&#xff09;、卓越的图像质量&#xff08;具备照片级真…