麒麟系统查看Swap使用趋势与性能优化
当麒麟操作系统响应变慢,而物理内存使用率显示正常时,问题根源很可能在于Swap交换空间。持续的页面交换操作或Swap空间被异常占用,都可能成为系统性能的隐形瓶颈。要精准定位此类问题,需要一套组合监控策略。以下五种方法,从实时采样到历史回溯,从系统全局到进程定位,能帮助您全面掌握Swap的动态。 一、
当麒麟操作系统响应变慢,而物理内存使用率显示正常时,问题根源很可能在于Swap交换空间。持续的页面交换操作或Swap空间被异常占用,都可能成为系统性能的隐形瓶颈。要精准定位此类问题,需要一套组合监控策略。以下五种方法,从实时采样到历史回溯,从系统全局到进程定位,能帮助您全面掌握Swap的动态。

一、使用vmstat周期性采样观察Swap I/O活动
若需快速判断系统当前是否正在进行页面交换,vmstat是首选工具。其系统开销极低,能提供实时的页面换入(si)和换出(so)速率,是监测内存压力的灵敏指标。
执行命令 vmstat 1 5,可每秒采样一次,连续采样5次。重点关注输出结果中的si和so列(单位为KB/s)。若连续多行数据均不为零,则表明Swap正在被活跃使用,系统内存可能已面临压力。
如需更宏观的视角,可运行 vmstat -s | grep -E "(swap|page)",此命令将显示交换页面的累计统计数据,有助于把握整体状况。
二、通过sar命令记录历史Swap使用率曲线
进行事后分析时,历史数据至关重要。sar命令的强大之处在于,它能按时间序列记录Swap使用率(%swpused)和页面交换活动(pgpgin/pgpgout),形成历史曲线。这对于排查周期性或偶发性内存问题非常关键。
首先,请确保sysstat服务已启动:sudo systemctl is-active sysstat。
随后,可立即开始采集数据:sar -W 10 6 表示每10秒采样一次Swap统计,共6次。若需同时观察页面换入换出的吞吐量,可使用 sar -B 10 6,并重点关注pgpgin和pgpgout字段的变化。
这些数据可直接导出至文件,便于后续对比分析:sar -W 10 6 > /tmp/swap_usage_$(date +%s).log。
三、解析/proc/swaps与/proc/meminfo动态追踪Swap状态
要获取最底层的系统信息,需查询内核。/proc文件系统下的这两个文件提供了最直接的数据。
cat /proc/swaps 会列出所有已启用的Swap设备及其使用详情,可直观查看Swap空间总量及占用情况。
而 grep -E "^(Swap|Pg)" /proc/meminfo 则可提取一系列关键指标:SwapTotal、SwapFree、SwapCached,以及与页面交换相关的 Pgpgin、Pgpgout、Pswpin、Pswpout。结合分析这些数据,可以交叉验证Swap空间是被实际占用,还是仅处于挂载状态。
配合watch命令可实现动态监控:watch -n 2 'grep -E "^(Swap|Pg)" /proc/meminfo',即每2秒刷新一次信息。
四、使用free命令结合时间戳生成趋势快照
在未安装sysstat的环境中,或需要进行快速简易诊断时,利用free命令配合简单脚本,即可构建一个轻量级的Swap使用趋势日志。
核心思路是循环执行free命令,并为每次输出添加时间戳。
例如,可创建一个记录文件,并运行如下循环:
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秒记录一次Swap的已用空间和总量,共记录20次。记录完成后,使用cat命令查看日志,或通过sort命令快速找出Swap使用率最高的几个时间点,问题线索往往隐藏在这些峰值之中。
五、利用top命令实时定位高Swap占用进程
在确认系统Swap使用率偏高后,下一步是定位具体是哪个进程占用了大量Swap空间。top命令本身不直接显示进程的Swap占用,但可通过它筛选出可疑进程,再进一步核查。
首先,运行top命令,然后按M键,使进程按内存使用率降序排列。记下内存消耗较高的进程PID。
接着,对每个可疑PID执行:grep -i "swap" /proc/[PID]/status 2>/dev/null | awk '{print $2}',即可查询到该进程具体的Swap使用量(单位为KB)。
若希望一次性找出系统中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
通过此方法,可以快速定位占用Swap资源的主要进程。
