商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > 麒麟操作系统如何查看Swap交换空间使用趋势 麒麟性能

麒麟操作系统如何查看Swap交换空间使用趋势 麒麟性能

  发布于2026-05-21 阅读(0)

扫一扫,手机访问

当麒麟操作系统出现响应迟缓,而物理内存使用率看似正常时,问题往往出在Swap交换空间上。持续的换页操作或Swap被异常占用,都可能是系统性能的隐形杀手。要精准定位问题,我们需要一套组合监控策略。下面这五种方法,从实时采样到历史回溯,从系统全局到进程定位,能帮你全面掌握Swap的动态。

麒麟操作系统如何查看Swap交换空间使用趋势 麒麟性能

一、使用vmstat周期性采样观察Swap I/O活动

想快速知道系统此刻是否在“偷偷”进行页面交换?vmstat是你的首选工具。它开销极低,能提供实时的换入(si)和换出(so)速率,是判断内存压力的灵敏探头。

执行命令 vmstat 1 5,每秒采样一次,共5次。重点盯着输出里的siso列(单位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秒采样一次,共6次,专门看Swap统计。如果想同时观察页面换入换出的吞吐量,就用 sar -B 10 6,重点关注pgpginpgpgout字段的变化。

这些数据可以直接导出到文件,方便后续对比分析: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命令加上一点脚本魔法,就能构建一个轻量级的趋势日志。

思路很简单:循环执行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使用率高,那到底是哪个进程在“搞鬼”?top命令本身不直接显示进程的Swap占用,但我们可以通过它找到嫌疑犯,再去/proc里取证。

首先,运行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

这样一来,元凶就无处遁形了。

本文转载于:https://www.php.cn/faq/2448387.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注