麒麟系统Swap异常可通过五种方法监控:一、vmstat查si/so换页速率;二、sar记录历史Swap使用率与换页吞吐;三、/proc/swaps与/proc/meminfo交叉验证实时状态;四、free循环快照生成趋势日志;五、top结合/proc/PID/status定位高Swap进程。
如果您在麒麟操作系统中观察到系统响应变慢或内存压力异常,但物理内存使用率并不高,可能是Swap交换空间被持续写入或频繁换页所致。查看Swap使用趋势有助于识别是否存在隐性内存泄漏、进程异常占用或swappiness策略失当等问题。以下是多种可操作的监控方法:
一、使用vmstat周期性采样观察Swap I/O活动
vmstat提供轻量级、低开销的系统级采样,特别适合捕获Swap空间的实时换入(si)与换出(so)速率变化,从而判断系统是否正承受内存压力并触发页面置换。
1、执行命令启动5次每秒采样:vmstat 1 5 2、关注输出中si和so列的数值(单位KB/s),若连续多行出现非零值,表明系统正在活跃使用Swap 3、附加内存摘要信息:vmstat -s | grep -E "(swap|page)",查看总交换页数、已换出页数等累计统计
二、通过sar命令记录历史Swap使用率曲线
sar可将Swap使用率(%swpused)及换页活动(pgpgin/pgpgout)按时间序列持久化采集,便于回溯分析趋势拐点,尤其适用于长期值守服务器环境。
1、确认sysstat服务已启用:sudo systemctl is-active sysstat 2、立即采集10秒间隔、共6次的Swap使用率:sar -W 10 6 3、若需同时获取换页吞吐量:sar -B 10 6,重点观察pgpgin和pgpgout字段的增量速率4、将结果导出为文本供后续比对:sar -W 10 6 > /tmp/swap_usage_$(date +%s).log
三、解析/proc/swaps与/proc/meminfo动态追踪Swap状态
/proc/swaps反映当前所有已启用Swap设备的大小与使用量,/proc/meminfo则提供内核级内存与Swap综合指标,二者结合可交叉验证Swap是否被真实占用而非仅挂载空闲。
1、列出全部Swap设备及其使用详情:cat /proc/swaps 2、提取关键Swap相关指标:grep -E "^(Swap|Pg)" /proc/meminfo Android 操作系统的介绍 中文WORD版本文档主要讲述的是Android 操作系统的介绍;Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看下载3、重点关注SwapTotal、SwapFree、SwapCached、Pgpgin、Pgpgout、Pswpin、Pswpout等字段的实时数值4、配合watch命令实现动态刷新观察:watch -n 2 'grep -E "^(Swap|Pg)" /proc/meminfo'
四、使用free命令结合时间戳生成趋势快照
free命令虽为瞬时快照,但通过脚本循环调用并添加时间标记,可构建简易趋势日志,适用于无sysstat环境或快速诊断场景。
1、创建临时记录文件:touch /tmp/swap_trend.log 2、运行循环采集(每3秒记录一次,共20次):for i in $(seq 1 20); do echo "$(date '+%H:%M:%S') $(free -h | awk '/Swap:/ {print $3\"/\"$2}')" >> /tmp/swap_trend.log; sleep 3; done 3、查看趋势记录:cat /tmp/swap_trend.log 4、识别峰值时刻:sort -k2 -t'/' -k1,1r /tmp/swap_trend.log | head -5
五、利用top命令实时定位高Swap占用进程
top本身不直接显示Swap用量,但可通过其进程排序功能结合/proc/PID/status反查各进程的Swap使用量,从而定位导致Swap使用率上升的具体程序。
1、启动top并按M键按内存使用率降序排列:top
2、记下疑似高内存消耗进程的PID
3、对每个PID执行:grep -i "swap" /proc/ PID/status 2>/dev/null | awk '{print $2}'4、汇总所有进程Swap用量并排序:for pid in $(ps -eo pid --no-headers); do swap=$(grep -i "swap" /proc/$pid/status 2>/dev/null | awk '{print $2}'); if [ -n "$swap" ]; then echo "$pid $swap"; fi; done | sort -k2 -nr | head -10
