centos swapper如何排除故障
导读:CentOS Swapper 故障排查与修复 一 快速判断与定位 查看内存与交换分区概况:运行 free -h;确认是否启用交换分区/文件:swapon --show 或 swapon -s。若 Swap 使用率接近 100% 且系统变慢...
CentOS Swapper 故障排查与修复
一 快速判断与定位
- 查看内存与交换分区概况:运行 free -h;确认是否启用交换分区/文件:swapon --show 或 swapon -s。若 Swap 使用率接近 100% 且系统变慢,多为内存不足或配置不当。
- 判断是否在频繁换入换出:运行 vmstat 1 10,关注 si/so(换入/换出 KB/s),持续非零且较大说明系统正依赖 Swap。
- 找出占用 Swap 最多的进程:
for i in $(ls /proc | grep “^[0-9]”); do awk ‘/Swap:/{ a+=$2} END{ print $i,a/1024"M"} ’ /proc/$i/smaps 2> /dev/null; done | sort -k2nr | head - 检查磁盘与内存资源:df -h(确保根分区/交换所在分区有空间)、free -h(确认是否物理内存不足)。
- 查看系统日志与内核消息:journalctl -xe、dmesg | grep -i swap,定位设备不可用、挂载失败等具体报错。
二 常见症状与对应处理
- 症状:Swap 占用过高、系统卡顿
处理:临时降低内核换出倾向 sysctl vm.swappiness=10(范围 0–100,重启后失效);永久生效写入 /etc/sysctl.conf:vm.swappiness=10 后执行 sysctl -p。同时结合上节定位并优化/终止异常进程,必要时增加物理内存或调整应用内存配置。 - 症状:重启后 Swap 未自动启用(free 显示 Swap 为 0)
处理:检查 /etc/fstab 中 Swap 条目是否正确(示例:分区为 /dev/sdXY none swap sw 0 0;文件为 /swapfile swap swap defaults 0 0),修正后执行 swapon -a 测试;若设备名变更(如 LVM 逻辑卷),同步更新 /etc/fstab 与引导参数。 - 症状:启动报错 “/dev/centos/swap does not exist”
处理:进入 GRUB 编辑界面,临时删除内核行中的 rd.lvm.lv=centos/swap 以正常启动;永久修复需编辑 /boot/grub2/grub.cfg,将该参数改为实际存在的 rd.lvm.lv=vgname/lv_swap(通常有两处需同步修改),重启验证。 - 症状:Swap 分区/文件疑似损坏或无法启用
处理:进入单用户/救援模式,对相应分区执行 fsck /dev/sdXY 修复;修复后重新 swapon 并验证。 - 症状:内核日志出现 “scheduling while atomic: swapper”
处理:通过 dmesg 定位触发函数与可疑驱动/模块,升级或回退相关驱动,避免在原子上下文中调用会睡眠的函数。
三 配置优化与替代方案
- 合理设置 Swap 大小(经验值,可按业务微调):
物理内存 建议 Swap 说明 ≤ 4GB 2× 内存 避免 OOM 4–8GB = 内存 平衡性能与占用 8–64GB 8GB 多数场景足够 > 64GB 16GB 内存密集场景可适当增加 - 创建或调整 Swap 文件(示例新增 8GB):
- 创建:fallocate -l 8G /swapfile(或 dd if=/dev/zero of=/swapfile bs=1M count=8192)
- 安全:chmod 600 /swapfile
- 格式化:mkswap /swapfile
- 启用:swapon /swapfile
- 持久化:在 /etc/fstab 添加 “/swapfile swap swap defaults 0 0”
- 使用 ZRAM(内存内压缩交换,减少磁盘 I/O):
- 加载模块:modprobe zram
- 配置算法与大小:echo lz4 > /sys/block/zram0/comp_algorithm;echo 4G > /sys/block/zram0/disksize
- 格式化并启用:mkswap /dev/zram0;swapon /dev/zram0
- 如需开机自启,可配置 systemd 单元或 rc.local(视发行版而定)。
四 无法进入系统时的维护与回退
- 进入单用户/救援模式:
- CentOS 7:GRUB 中编辑内核行,将 ro 改为 rw,行尾追加 init=/bin/bash,删除 rhgb/quiet,按 Ctrl+X 启动;
- CentOS 6:GRUB 内核行末尾添加 single 启动。
- 维护操作要点:
- 修正 /etc/fstab 中错误的 Swap 条目后执行 swapon -a 测试;
- 对疑似异常的分区执行 fsck;
- 若因 LVM 逻辑卷变更导致启动失败,按第二节方法修正 rd.lvm.lv=… 参数;
- 完成后重启验证。
五 实用命令清单
- 资源与启用状态:free -h、swapon --show、swapon -s、vmstat 1 10
- 进程定位:for i in $(ls /proc | grep “^[0-9]”); do awk ‘/Swap:/{ a+=$2} END{ print $i,a/1024"M"} ’ /proc/$i/smaps 2> /dev/null; done | sort -k2nr | head
- 配置与参数:sysctl vm.swappiness=10、cat /proc/sys/vm/swappiness、编辑 /etc/sysctl.conf 后 sysctl -p
- 日志与故障排查:journalctl -xe、dmesg | grep -i swap、必要时 dmesg | grep -i “scheduling while atomic”
- 文件系统与磁盘:df -h、对分区 fsck /dev/sdXY
- LVM 启动参数修正:编辑 /boot/grub2/grub.cfg 中的 rd.lvm.lv=vgname/lv_swap 两处一致后重启
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos swapper如何排除故障
本文地址: https://pptw.com/jishu/747883.html
