Linux top命令怎么看swap?swap占用高怎么解决

在 Linux 系统中,top 命令是监控系统资源使用情况最常用的工具之一,而 Swap(交换空间) 则是虚拟内存管理的重要组成部分,理解 top 中 Swap 相关的指标,对于排查内存瓶颈、性能问题至关重要。

以下是关于 top 命令中 Swap 部分的详细解读:

每天一个Linux命令-mkdir
加载中
每天一个Linux命令-mkdir

如何在 top 中查看 Swap 信息

默认情况下,top 命令会显示内存(Mem)和交换空间(Swap)的使用情况。

直接运行 top

top

在输出头部,你会看到类似这样的行:

MiB Mem :  16384.0 total,   2048.0 free,   8192.0 used,   6144.0 buff/cache
MiB Swap:   8192.0 total,   8192.0 free,      0.0 used.   7680.0 avail Mem

f 键自定义显示字段

如果某些 Swap 字段未显示,可以按 f 进入字段选择界面,确保以下字段被选中(用 标记):

  • SWAPSWAP TOTAL
  • SWAP FREE
  • SWAP USED

Swap 关键字段详解

top 的输出中,Swap 部分通常包含以下四个关键指标:

Linux top命令怎么看swap?swap占用高怎么解决

字段 含义 说明
total 总交换空间大小 系统配置的 Swap 分区或 Swap 文件总容量。
free 空闲交换空间 尚未使用的 Swap 空间。
used 已使用的交换空间 当前正在被使用的 Swap 空间大小。这是最关键的性能指标。
avail Mem 可用物理内存 可供新应用程序使用的物理内存(包含可回收的缓存)。

⚠️ 注意:top 中显示的 avail Mem物理内存的可用量,不是 Swap 的。


如何解读 Swap 使用情况?

✅ 正常情况

  • used 为 0 或接近 0:系统物理内存充足,无需使用 Swap。
  • used 少量存在:系统偶尔将不活跃的数据页换出到 Swap,属于正常行为,有助于释放物理内存供缓存使用。

⚠️ 需要关注

  • used 持续增长:可能意味着物理内存不足,或者应用程序存在内存泄漏。
  • used 较高但系统响应正常:可能是历史遗留数据,尚未被回收。

❌ 性能问题(Swap Thrashing / 交换颠簸)

  • used 很高 + 系统响应缓慢 + CPU 等待 I/O 高
    • 系统频繁地在物理内存和 Swap 之间交换数据。
    • 磁盘 I/O 成为瓶颈,导致系统卡顿。
    • 此时应检查是否有进程占用过多内存,或考虑增加物理内存。

Linux top命令怎么看swap?swap占用高怎么解决

常用相关命令与技巧

🔍 查看哪些进程在使用 Swap

top 本身不直接显示每个进程的 Swap 使用量,但你可以:

  1. top 中按 P(按内存排序),然后查看 %MEM 列。
  2. 使用 ps 命令精确查询
    # 按 Swap 使用量排序,显示前 10 个进程
    ps -eo pid,comm,swap --sort=-swap | head -n 11
  3. 使用 smem 工具(更直观):
    sudo apt install smem   # Debian/Ubuntu
    sudo yum install smem   # CentOS/RHEL
    smem -t -k -s swap      # 按 Swap 排序显示

📊 实时监控 Swap 变化

# 使用 watch 命令每秒刷新 top 的 Swap 信息
watch -n 1 'top -b -n 1 | grep -i swap'

🛠 调整 Swap 使用策略(swappiness)

Linux 内核有一个参数 vm.swappiness,控制系统倾向于使用 Swap 的程度(0~100):

  • 0:尽可能少用 Swap,只在物理内存极度不足时才使用。
  • 60:默认值,平衡使用。
  • 100:积极使用 Swap,类似 Windows 的行为。

查看当前值:

cat /proc/sys/vm/swappiness

临时修改(立即生效):

sudo sysctl vm.swappiness=10

永久修改(写入配置文件):

Linux top命令怎么看swap?swap占用高怎么解决

echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf sudo sysctl -p

💡 建议:对于数据库服务器(如 MySQL、PostgreSQL),通常建议将 swappiness 设置为较低值(如 10 或 0),以避免数据库页面被换出导致性能下降。


常见问题排查步骤

如果怀疑 Swap 导致性能问题,请按以下步骤排查:

  1. 确认 Swap 使用量
    free -h
  2. 查看是否有进程大量占用物理内存
    top -o %MEM
  3. 检查磁盘 I/O 是否瓶颈
    iostat -x 1

    关注 %util 是否接近 100%,以及 await 是否很高。

  4. 检查内核日志是否有 OOM Killer 记录
    dmesg | grep -i "out of memory"
    journalctl -k | grep -i "oom"

  • Swap 不是内存的替代品,而是物理内存不足时的“缓冲垫”。
  • top 中 Swap used 为 0 是理想状态,少量使用是正常的。
  • 高 Swap 使用 + 高 I/O 等待 = 性能瓶颈,需优化内存或增加物理内存。
  • 使用 pssmem 可以更精确地定位占用 Swap 的进程。

如有具体 top 输出截图或系统状态描述,我可以提供更针对性的分析。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/483112.html

(0)
SSL证书中间证书链怎么补全?如何配置中间证书
上一篇 2026年7月11日 20:12
GEO优化CPA模式可以吗2026最新?百度GEO优化怎么做
下一篇 2026年7月11日 20:15

相关推荐

  • Linux磁盘容量怎么查?linux查看硬盘剩余空间命令

    Linux系统容量查询的核心在于结合df命令查看磁盘整体使用率,利用du命令深入分析目录占用细节,并通过定期监控防止空间耗尽导致服务中断,在服务器运维或日常开发中,磁盘空间不足往往是导致服务崩溃、日志无法写入或数据库锁死的隐形杀手,很多新手遇到“No space left on device”报错时,第一反应是……

    2026年7月10日
    13500
  • linux sort -t怎么用?sort命令按指定分隔符排序

    Linux中sort -t命令的核心作用是指定字段分隔符,默认以空白字符分隔,通过-t参数可自定义如逗号、冒号等符号,从而精准提取CSV或日志文件中的特定列进行排序,在Linux命令行世界里,处理文本数据是日常操作的重头戏,很多时候,我们面对的不是整齐划一的单列数据,而是像CSV表格或者系统日志那样,用特定符号……

    2026年7月9日
    19600
  • linux getopt long参数怎么用?linux getopt long参数详解

    Linux getopt long 是解析命令行长选项的标准工具,它能显著提升脚本的可读性与维护性,相比短选项更直观且不易冲突,在 Linux 命令行交互中,我们经常需要处理复杂的参数传递,传统的短选项如 -f 或 -v 虽然简洁,但在脚本日益庞大、参数众多的场景下,容易引发歧义,-o 可能代表 output……

    2026年7月4日
    7000
  • linux扫描存储怎么做?linux磁盘空间不足怎么排查

    在Linux系统中扫描存储设备,核心在于结合lsblk查看拓扑、smartctl诊断健康、blkid识别文件系统以及fdisk/parted进行分区管理,通过组合使用这些工具可实现从硬件底层到逻辑分层的全面掌控,对于运维人员或系统管理员而言,存储管理不仅仅是挂载磁盘那么简单,它更像是在驾驶一辆重型卡车,你需要时……

    2026年7月4日
    12410
  • Linux Shell如何终止进程?linux shell终止命令详解

    在Linux Shell中终止进程最直接有效的方法是使用kill命令配合进程ID(PID),若进程无响应则需使用kill -9强制终止,而终止当前正在运行的脚本或命令通常使用Ctrl+C组合键,日常运维中,我们常遇到程序卡死、资源占用过高或需要批量管理后台任务的情况,面对这些场景,如何精准、安全地终止进程是每位……

    2026年7月9日
    13900
  • Linux mutex lock如何正确使用?Linux互斥锁详解

    Linux mutex lock 是内核中用于保护共享资源、防止多线程并发竞争导致数据损坏的核心同步原语,其核心机制是通过原子操作将线程状态在“未锁定”与“睡眠等待”之间切换,确保同一时刻只有一个线程能访问临界区,在多核处理器普及的今天,并发编程已成为软件开发的常态,当多个线程试图同时修改同一块内存数据时,如果……

    2026年7月5日
    14700
  • linux httpd yum安装失败怎么办?linux httpd yum安装教程

    在基于RHEL系的Linux发行版中,通过yum安装Apache HTTP Server的标准命令是yum install httpd,随后需执行systemctl start httpd启动服务并配置防火墙放行80端口,即可快速搭建Web环境,很多刚接触Linux运维的朋友,面对终端黑底白字的界面时,往往对……

    2026年7月8日
    12800
  • linux cp file命令怎么用?linux复制文件命令详解

    Linux系统中复制文件的核心命令是cp,其基本语法为cp [选项] 源文件 目标路径,支持递归复制目录、保留属性及强制覆盖等操作,在Linux的世界里,文件管理就像整理一个巨大的仓库,cp命令就是那个不知疲倦的搬运工,它负责将数据从原处搬到新地方,很多新手在面对终端黑底白字时,往往对cp感到陌生,甚至与mv……

    2026年7月8日
    16000
  • linux怎么开启openssl?openssl开启教程

    在 Linux 系统中,OpenSSL 通常作为库或命令行工具预装,而不是一个需要像服务一样“开启”或“关闭”的后台进程,根据你的具体需求,“开启 OpenSSL”可能有以下几种含义:✅ 情况一:你只是想使用 OpenSSL 命令行工具(如生成证书、测试 HTTPS 等)大多数 Linux 发行版已预装 Ope……

    2026年7月9日
    11000
  • Linux如何安装LZO?Linux安装LZO报错解决方法

    在Linux系统中安装LZO库,最推荐的方式是通过包管理器直接安装预编译版本,若需最高性能则建议从源码编译并启用汇编优化, LZO(Lempel-Ziv-Oberhumer)是一种以速度著称的无损数据压缩算法,它在嵌入式设备、数据库索引以及实时通信场景中扮演着关键角色,对于许多开发者而言,如何在不同的Linux……

    2026年7月8日
    18500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注