2026/2/15 18:10:58
网站建设
项目流程
网站的公告轮播效果怎么做,查icp备案是什么网站,废物利用手工制作图片,佛山网上业务系统#x1f4ca; OOM Killer 深度监控#xff1a;进程、cgroup 和 namespace 配置
#x1f50d; 查看 OOM Killer 详细信息
1. 查看 OOM 杀死的历史记录
# 查看内核环形缓冲区中的 OOM 详细日志
sudo dmesg -T | grep -A 30 -B 5 Out of memory# 使用专门的 OOM 日… OOM Killer 深度监控进程、cgroup 和 namespace 配置查看 OOM Killer 详细信息1.查看 OOM 杀死的历史记录# 查看内核环形缓冲区中的 OOM 详细日志sudodmesg-T|grep-A30-B5Out of memory# 使用专门的 OOM 日志分析工具sudojournalctl -k --grepoom\|out.of.memory--since24 hours ago# 查看被杀死进程的详细信息sudogrep-ikilled process/var/log/messages|tail-20# 更详细的 OOM 信息包含内存统计sudojournalctl -k|grep-ioom_kill_process-A102.查看当前内存压力状态# 查看内存压力状态cat/proc/pressure/memory# 监控内存压力变化watch-n1cat /proc/pressure/memory# 查看每个 NUMA 节点的内存统计cat/proc/zoneinfo|grep-A5Node# 查看页面分配失败统计OOM 前兆cat/proc/vmstat|grep-Eallocstall|pgalloc_dma进程级别的 OOM 配置查看1.查看单个进程的 OOM 配置# 查看指定进程的所有 OOM 相关文件ls-la /proc/PID/oom_*# 查看 OOM 分数越高越容易被杀cat/proc/PID/oom_score# 查看 OOM 调整值范围-1000 到 1000cat/proc/PID/oom_score_adj# 查看进程的内存使用情况cat/proc/PID/status|grep-A10-EVm# 查看进程的内存映射cat/proc/PID/maps2.批量查看所有进程的 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 -ocomm2/dev/null)echoPID:$pid, CMD:$cmd, OOM Score:$oom_score, OOM Adj:$oom_adjfidone|sort-k6 -rn|head-20# 更简洁的版本ps-eo pid,comm,%mem --sort-%mem|head-10|whilereadpid cmd mem;do[-f /proc/$pid/oom_score]\echoPID:$pid, CMD:$cmd, MEM:$mem%, OOM:$(cat/proc/$pid/oom_score)done️Cgroup 相关的 OOM 配置1.Cgroup v1CentOS 7 默认# 查看 cgroup 内存配置ls-la /sys/fs/cgroup/memory/# 查看系统所有 memory cgroupfind/sys/fs/cgroup/memory -namememory.*-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 Killer1 禁用# under_oom 0 没有 OOM1 处于 OOM 状态# 查看 cgroup 的内存统计cat/sys/fs/cgroup/memory/memory.stat# 查看哪个 cgroup 发生了 OOMsudodmesg|grep-ioom_kill|grep-ocgroup.*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.pressure3.Docker 容器的 OOM 配置# 查看 Docker 容器的内存限制dockerinspectcontainer_id|grep-i memory# 查看容器的 cgroup 路径dockerinspectcontainer_id|grepCgroup# 查看容器的 OOM 事件dockerevents --filtereventoom--since24h# 查看容器内进程的 OOM 状态dockerstats --no-stream# 进入容器的 cgroup 查看详细配置CONTAINER_IDyour_container_idCGROUP_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 -NPID2.查看 Namespace 中的内存配置# 查看特定 namespace 中的内存信息nsenter -tPID-mfree-h# 进入容器的 namespace 查看内存nsenter -tPID-m -pcat/proc/meminfo# 查看不同 namespace 中的内存压力nsenter -tPID-mcat/proc/pressure/memory高级诊断工具1.使用 systemd-cgtop 监控 cgroup# 按内存使用排序查看 cgroupsystemd-cgtop --ordermemory# 实时监控 cgroup 内存变化watch-n1systemd-cgtop --ordermemory2.使用 cgroup-tools# 安装 cgroup 工具yuminstalllibcgroup libcgroup-tools# 查看所有 cgroup 子系统lssubsys -am# 查看特定进程的 cgroupcat/proc/PID/cgroup# 查看 cgroup 配置cgget -r memorycgroup_path3.自定义 OOM 监控脚本#!/bin/bash# oom-monitor.sh# 监控 OOM 事件echo OOM Killer 监控 echo1. 查看最近 OOM 事件:journalctl -k --since1 hour ago|grep-ioom\|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 -namememory.usage_in_bytes);dousage$(cat$cg)limit_file$(echo$cg|seds/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))echoCgroup:$(dirname$cg), Usage:${usage_mb}MB, Limit:${limit_mb}MBfifidone|head-10echo-e\n4. 内存压力状态:cat/proc/pressure/memory实战分析 OOM 事件1.完整 OOM 事件分析流程# 步骤1: 查找最近的 OOM 事件OOM_LOG$(sudojournalctl -k|grep-B5 -A15Out of memory|tail-30)echo$OOM_LOG# 步骤2: 提取被杀死的进程信息KILLED_PID$(echo$OOM_LOG|grepKilled process|grep-opid [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-EVm|Rssfi# 步骤5: 查看进程的 OOM 配置echoOOM 配置:cat/proc/$KILLED_PID/oom_scorecat/proc/$KILLED_PID/oom_score_adjfi2.Cgroup OOM 分析#!/bin/bash# analyze-cgroup-oom.sh# 查找发生过 OOM 的 cgroupecho查找发生过 OOM 的 cgroup:find/sys/fs/cgroup/memory -namememory.oom_control|whilereadfile;dounder_oom$(grepunder_oom$file|awk{print $2})if[$under_oom1];thencgroup$(dirname$file)echoCgroup$cgroup处于 OOM 状态echo 内存使用:$(cat$cgroup/memory.usage_in_bytes)bytesecho 内存限制:$(cat$cgroup/memory.limit_in_bytes)bytesfidone⚙️配置建议和优化1.保护重要进程# 为重要进程设置 OOM 保护echo-1000/proc/PID/oom_score_adj# 对于 systemd 服务[Service]OOMScoreAdjust-1000MemoryHigh90%MemoryMax95%2.Cgroup 内存限制最佳实践# 为不同服务设置合理的 cgroup 限制# /etc/systemd/system/myapp.service.d/memory.conf[Service]MemoryLimit2GMemorySwapMax1G3.监控和报警配置# 在 /etc/crontab 中添加定期检查*/5 * * * * root /usr/local/bin/check-oom-risk.sh# 使用 Prometheus node_exporter 监控# 监控指标: node_memory_OOM_kill, node_memory_pressure