麒麟系统查看Swap使用趋势与性能优化

作者:技术拾光时间:2026-05-19 20:35:12浏览:375

当麒麟操作系统响应变慢,而物理内存使用率显示正常时,问题根源很可能在于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资源的主要进程。