CentOS 中“swapper”日志分析思路与定位路径
一、先明确“swapper”在 Linux 中的含义
- swapper通常指内核的空闲进程(PID 0),本身不产生业务日志;与“swapper”相关的可观测信息主要是Swap 的使用与内核/系统日志。因此,分析重点应放在:Swap 状态、内核与 systemd 日志中关于 Swap 的事件、以及哪些进程在使用 Swap。
二、日志来源与快速定位
- 系统通用日志
- CentOS 7 及更早:查看 /var/log/messages
- CentOS 8/Stream:查看 /var/log/syslog
- 用法示例:grep -i swap /var/log/messages 或 /var/log/syslog
- systemd 日志
- 查看所有与 swap 相关的日志:journalctl -xe | grep -i swap
- 查看内核日志:journalctl -k | grep -i swap
- 按时间窗口检索:journalctl --since “2025-12-09 00:00:00” --until “2025-12-09 12:00:00” | grep -i swap
- 内核环缓冲区
- dmesg | grep -i swap(可看到 Swap 初始化、设备不可用等底层信息)
- 先确认 Swap 是否在用
- free -h、swapon --show(若未启用,则上述日志可能无相关内容)
三、常用分析方法与命令组合
- 基线检查与实时监控
- 基线:free -h、swapon --show
- 实时:top/htop(观察 %swp 与内存占用,定位异常进程)
- 找出占用 Swap 最多的进程
- 通过 /proc//smaps 汇总各进程 Swap 使用并排序:
for i in $(ls /proc | grep -E ‘^[0-9]+’); do
awk ‘/Swap:/{s+=$2} END {printf “%s %.1fM\n”, i, s/1024}’ /proc/$i/smaps 2>/dev/null;
done | sort -k2nr | head
- 日志中的时间线定位
- 将“异常发生时间”与 journalctl -k、dmesg、/var/log/messages|syslog 的报错时间点对齐,回溯 Swap 启用/失败/回收等关键事件
- 文本处理与统计
- 在日志中筛选与统计关键词:grep -i、awk、sort、uniq -c、tail -f(实时跟踪)
- 示例:统计某时段内 swap 相关错误数
journalctl --since “2025-12-09 00:00:00” --until “2025-12-09 12:00:00” | grep -i swap | grep -i error | wc -l
- 长期保留与归档
- 配置 logrotate 对 /var/log/messages 或 /var/log/syslog 做按日轮转与压缩,避免日志过大影响检索
四、典型场景与处置建议
- Swap 使用率长期偏高
- 用“进程级 Swap 汇总”定位大户进程,评估是否可以优化/重启;必要时结合业务窗口做内存治理
- 临时降低内核换出倾向:sysctl vm.swappiness=10(数值越低越倾向少用 Swap)
- 永久生效:在 /etc/sysctl.conf 中设置 vm.swappiness=10 后执行 sysctl -p
- Swap 挂载/启用失败
- 检查内核与系统日志:dmesg | grep -i swap、journalctl -xe | grep -i swap
- 核对 /etc/fstab 中 swap 条目与设备路径是否正确,必要时修正后 swapon -a 测试
- 需要更直观的可视化与集中分析
- 小规模可用 grep/awk 做统计报表;中大规模建议接入 ELK Stack(Elasticsearch/Logstash/Kibana)/Splunk/Graylog 做统一采集、检索与可视化