Linux系统如何查询内存信息?有哪些常用命令和具体操作步骤?

在Linux系统中,内存是影响系统性能的关键资源之一,准确掌握内存的使用情况对系统优化、故障排查至关重要,本文将详细介绍Linux下查询内存信息的多种命令及其使用方法,帮助用户全面了解内存状态。

linux如何查询内存信息

使用free命令快速查看内存概览

free是Linux中最常用的内存查看工具,以易读的格式显示物理内存和交换分区的使用情况,其基本语法为free [选项],常用选项包括:

  • -h:以人类可读格式显示(如KB、MB、GB);
  • -m:以MB为单位显示;
  • -g:以GB为单位显示;
  • -s:设置刷新间隔(单位为秒),例如free -s 3每3秒刷新一次。

执行free -h后,输出类似如下:

              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        1.2G        256M        4.4G        5.0G
Swap:          2.0G          0B        2.0G

各列含义如下:

  • total:总物理内存;
  • used:已使用内存(包含应用程序、缓存、缓冲区等);
  • free:完全未使用的内存;
  • shared:进程间共享内存(如tmpfs);
  • buff/cache:缓存(Cache)和缓冲区(Buffers)的总和,用于加速文件读写;
  • available:真正可用的内存(包含free+可回收的cache/buffer),是判断内存是否充足的重要指标,而非free列。

查看/proc/meminfo获取详细内存信息

/proc/meminfo是内核提供的内存详细信息文件,包含更底层的统计数据,执行cat /proc/meminfo可查看所有字段,其中关键字段如下(表格整理):

字段名 含义 单位
MemTotal 总物理内存 KB
MemFree 未使用内存 KB
Buffers 块设备缓冲区(用于存储块设备I/O数据) KB
Cached 页缓存(用于加速文件读取) KB
SwapTotal 交换区分区总大小 KB
SwapFree 交换区分区剩余大小 KB
Active 活跃内存(正在使用的内存) KB
Inactive 非活跃内存(可回收的内存) KB
Dirty 脏页(已修改但未写入磁盘的内存) KB
Slab 内核数据结构缓存 KB

通过grep "MemTotal|MemAvailable|SwapTotal" /proc/meminfo可快速提取关键信息:

MemTotal:       7864316 kB  
MemAvailable:   5160800 kB  
SwapTotal:      2097148 kB  

使用vmstat命令监控内存动态变化

vmstat(Virtual Memory Statistics)可实时监控虚拟内存、进程、CPU等状态,语法为vmstat [选项] [刷新间隔] [次数],重点关注内存相关列:

linux如何查询内存信息

  • buff:块设备缓冲区大小;
  • cache:页缓存大小;
  • si:从交换区调入内存的量(KB/s),若持续大于0,可能内存不足;
  • so:调出到交换区的量(KB/s),同上。

执行vmstat 2 3(每2秒刷新1次,共3次),输出类似:

procs -----------memory---------- ---swap-- ---io-- -system-- ------cpu-----  
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
 1  0      0 1234567 89012 3456789    0    0    10    20   100  150  5  2 92 1 0  

通过top/htop实时监控进程内存占用

top是动态进程管理工具,默认按CPU使用率排序,按M键可切换为按内存占用排序,关键内存列包括:

  • VIRT:虚拟内存大小(进程使用的总内存,包括代码、数据、共享库、交换区等);
  • RES:常驻内存集(实际物理内存占用,不包括交换区);
  • SHR:共享内存(如共享库、进程间通信内存);
  • %MEM:物理内存占用百分比。

htoptop的增强版,支持鼠标操作、进程树展开等,界面更直观,安装后执行htop,按F6选择MEM%即可按内存占用排序。

使用smem精确分析进程内存

smem可区分物理内存、虚拟内存、共享内存,计算进程的实际内存占用(如PSS,Proportional Set Size,按比例分摊的共享内存),安装后执行smem -P(按进程显示),输出包含:

  • Pss:进程实际占用的物理内存(包含共享内存分摊);
  • Uss:进程独占的物理内存(不包含共享内存);
  • Swap:进程使用的交换区大小。

smem -P | sort -nrk 4 | head -5可查看内存占用最高的前5个进程。

NUMA架构服务器的内存查询

对于NUMA(Non-Uniform Memory Access)架构服务器,使用numastat可查看每个NUMA节点的内存分布,执行numastat,输出类似:

linux如何查询内存信息

node0           node1  
---------------------- ----------------------  
total       3932160    3932160  
free        1966080    1966080  
used        1966080    1966080  

结合numactl可绑定进程到特定NUMA节点,优化内存访问效率。

Linux查询内存信息的工具各有侧重:free适合快速概览,/proc/meminfo提供底层细节,vmstat监控动态变化,top/htop实时跟踪进程内存,smem精确分析内存占用,numastat针对NUMA架构,根据需求选择合适工具,结合availablesi/so等指标,可准确判断内存状态并进行优化。

相关问答FAQs

问题1:为什么free -h显示的已用内存(used)很高,但系统运行仍然流畅?
解答:Linux内存管理中,已用内存包含两部分:应用程序实际占用的内存(Active)和可回收的缓存(Cached)与缓冲区(Buffers),Cached用于加速文件读取,Buffers用于块设备I/O,这些内存可在应用程序需要时被内核释放,判断内存是否充足应关注available列(真正可用内存),而非used列,只要available不为0,系统就不会因内存不足卡顿。

问题2:如何查看系统中哪些进程占用了最多的物理内存?
解答:可通过以下命令实现:

  1. 使用top:执行top,按M键按内存占用(%MEM)排序,或按Shift+F选择MEM%列排序,即可查看进程内存占用。
  2. 使用ps命令:执行ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem,按内存占用百分比(%MEM)降序排列,显示进程ID、父进程ID、命令及内存占用。
  3. 使用smem:执行smem -P | sort -nrk 4(按PSS列降序),可查看进程实际物理内存占用(包含共享内存分摊),更准确反映内存使用情况。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/27110.html

(0)
酷番叔酷番叔
上一篇 2025年9月20日 22:13
下一篇 2025年9月20日 22:25

相关推荐

  • Linux系统中如何kill掉bjmc进程?命令与操作步骤详解

    在Linux系统中,终止特定进程(如bjmc)是系统管理和日常运维中的常见操作,当某个进程出现异常、占用过多资源或需要手动停止时,掌握正确的终止方法至关重要,本文将详细介绍如何通过Linux命令行工具精准定位并安全终止bjmc进程,包括进程查找、信号发送及注意事项,第一步:确认并定位bjmc进程在终止进程前,需……

    2025年8月26日
    8600
  • Linux系统如何开启网卡服务?操作步骤是什么?

    在Linux系统中,网卡服务是保障网络连接的核心,若服务未开启或异常,会导致系统无法访问网络,开启网卡服务需结合具体发行版(如CentOS/RHEL使用systemd,Ubuntu/Debian可能用NetworkManager或netplan)及当前网络管理工具,以下是详细操作步骤和注意事项,检查当前网卡与服……

    2025年10月7日
    4800
  • PHP-FPM服务异常如何重启?

    在Linux系统中重启PHP服务是常见的运维操作,通常发生在修改PHP配置(如php.ini)或更新代码后需要重新加载时,具体方法取决于PHP的运行方式和系统服务管理工具,以下是详细指南:确认PHP运行方式重启前需明确PHP的工作模式:PHP-FPM模式(主流):Nginx或Apache通过FastCGI与PH……

    2025年7月16日
    11400
  • Linux中如何暂停一个运行中的进程?

    在Linux系统中,暂停进程是常见的操作,主要用于临时释放系统资源、调试程序或管理多任务运行状态,暂停进程的本质是将其从运行状态切换至“停止状态”(Stopped),此时进程会暂停执行,但保留其内存和上下文信息,便于后续恢复,以下是Linux中暂停进程的详细方法及操作场景,交互式暂停:Ctrl+Z(发送SIGT……

    2025年9月16日
    9000
  • 如何解决你常遇到的5大问题?

    在Linux GNOME桌面环境中更换软件源(Repository)是提升软件下载速度、获取稳定更新的关键操作,以下为详细步骤及注意事项,适用于Ubuntu、Debian等主流发行版(其他发行版逻辑类似):为什么需要换源?加速下载:国内用户访问官方源速度较慢,更换为国内镜像源(如阿里云、清华、中科大)可显著提升……

    2025年7月27日
    8900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信