游乐游手机版
首页/系统平台/文章详情

Linux如何查看共享内存大小及使用情况

时间:2026-08-18 17:55
很多人会把 free 命令中的 shared 字段误认为是 Linux IPC 共享内存大小,其实这是一个非常常见的理解偏差。这个字段真正反映的,是 tmpfs 挂载点(例如 dev shm)所占用的内存情况,并不包含通过 ipcs -m 查看的 System V 共享内存段。那么,Linux 怎

很多人会把 free 命令中的 shared 字段误认为是 Linux IPC 共享内存大小,其实这是一个非常常见的理解偏差。这个字段真正反映的,是 tmpfs 挂载点(例如 /dev/shm)所占用的内存情况,并不包含通过 ipcs -m 查看的 System V 共享内存段。那么,Linux 怎么查看共享内存大小才更准确?如果要查询 System V 共享内存,应使用 ipcs -m;如果要查看 POSIX 共享内存,可以执行 ls -l /dev/shm/;而若想进一步了解内核层面的共享内存实际消耗,则需要重点查看 /proc/meminfo 里的 Shmem 字段。

Linux怎么查看共享内存大小

free 命令里 shared 字段不等于 IPC 共享内存

很多用户看到 free 输出中的 shared 列时,往往会直接理解成 System V 或 POSIX 共享内存占用,但这种理解并不准确。实际上,这个字段在较新的 Linux 内核(5.0+)中已经逐步被弃用,不少发行版(如 Ubuntu 22.04、CentOS 8+)默认不是显示为 0,就是干脆不再展示。即便它存在数值,表示的也不是 ipcs -m 管理的 IPC 共享内存,而是 tmpfs 挂载点(如 /dev/shm)已经使用的内存空间。

查 System V 共享内存用 ipcs -m

如果你想查看 Linux 中的 System V 共享内存大小,最直接、最常用的方法就是使用 ipcs -m,它专门用于列出当前系统中的所有 System V 共享内存段:

  • ipcs -m 可显示所有共享内存段的 ID、所有者、权限、大小(bytes)、挂接数(nattch)等详细信息
  • ipcs -mu 只展示汇总结果,例如总段数、总字节数以及最大共享内存段大小
  • 如果只想筛选某个用户或某个进程创建的共享内存段,可结合 ipcs -m | grep 进行过滤

需要注意的是:ipcs 无法显示 POSIX 共享内存,也就是通过 shm_open() 创建的那一类。这类共享内存通常位于 /dev/shm 目录下,本质上属于 tmpfs 文件系统的一部分。

查 POSIX 共享内存看 /dev/shm 目录

POSIX 共享内存本质上是通过 shm_open()/dev/shm 中创建的文件,因此要查看这类共享内存大小,核心思路就是检查该目录下文件的占用情况。虽然表面看起来像“文件大小”,但实际对应的是内存映射资源:

  • ls -l /dev/shm/ 可查看所有 shm 文件及对应大小,单位通常为字节
  • du -sh /dev/shm/* 2>/dev/null | sort -h 可以按占用大小排序显示,同时忽略无权限访问的条目
  • df -h /dev/shm 可查看整个 tmpfs 分区的已用空间和可用空间(默认上限通常是 64MB,也可以通过 mount 参数调整)

⚠️ 这里有一个很容易忽略的问题:如果程序执行了 shm_unlink(),但并没有及时 munmap,那么文件虽然已经从目录中删除,内存却仍然处于占用状态。这种情况下,ls 看不到相关对象,但 df 的已用空间已经把它统计进去了。遇到这种情况,通常需要结合 lsof +D /dev/shm 来定位仍然持有句柄的进程。

查内核实际分配的共享内存总量(含 Slab 缓存)

如果你真正关心的是“Linux 系统为了共享内存机制究竟实际消耗了多少物理内存”,那就不能只看用户态能直接看到的那部分。因为内核还会把共享内存相关的元数据、页表开销,以及 Slab 分配器产生的部分额外消耗一起算进去。此时,更准确的参考来源是:

  • cat /proc/meminfo | grep -i "shmem|shm",重点查看 Shmem: 字段,它代表 tmpfs 与 shm 相关的总内存占用
  • cat /proc/meminfo | grep -i "slab" 中的 SReclaimable 可能包含一部分共享内存相关缓存,但无法完全精准拆分
  • 要特别注意:Shmem: 包含的是所有 tmpfs 实例(例如 /dev/shm/run 等)的总量,并不只是 IPC 共享内存

更复杂的一点在于:System V 共享内存段本身通常不会直接体现在 /proc/meminfoShmem 统计中,因为它走的是匿名页路径;而 POSIX 共享内存(/dev/shm)则会计入 Shmem。正因为两者底层实现机制不同,所以在做 Linux 共享内存监控、排查共享内存占用或分析内存使用时,最好将它们分别查看、分开判断。

来源:https://www.php.cn/faq/2942878.html
上一篇Linux查看磁盘使用分布的常用方法与命令 下一篇Linux如何查找7天前修改过的文件
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
VMware安装Ubuntu完整教程:创建虚拟机与启动验证
系统平台 · 2026-09-01

VMware安装Ubuntu完整教程:创建虚拟机与启动验证

本教程详细演示如何在VMware中创建Ubuntu虚拟机,涵盖ISO挂载、硬件配置、安装向导及启动验证。通过清晰的步骤与验证命令,帮助新手快速搭建可用的Linux学习环境。

Win10专业版U盘安装教程:制作启动盘与完整安装步骤
系统平台 · 2026-09-01

Win10专业版U盘安装教程:制作启动盘与完整安装步骤

本文提供Win10专业版U盘安装完整流程:准备8GB以上U盘与官方镜像,制作启动盘并核对盘符;通过F12 F11 Esc等快捷键或BIOS设置U盘为第一启动项;安装时选择专业版并谨慎分区;完成后在“设置—系统—关于”验证版本与激活状态。操作前务必备份数据。

Windows10系统字体太小怎么调大
系统平台 · 2026-08-27

Windows10系统字体太小怎么调大

Windows10系统字体太小怎么调大?只需两步:首先打开设置中的显示选项,将缩放比例调整为125%或150%;随后运行ClearType文本调谐器优化字体清晰度。此方法适用于高分屏及普通屏幕,无需修改注册表即可解决界面拥挤问题。

Win10磁盘占用100%基础排查:从监控到清理的完整步骤
系统平台 · 2026-08-27

Win10磁盘占用100%基础排查:从监控到清理的完整步骤

Windows 10系统出现磁盘占用100%会导致电脑卡顿、程序响应缓慢。本文提供基础排查方案:首先通过任务管理器确认是否为磁盘高负载,随后进入系统存储页面分析C盘占用类别,最后针对性清理临时文件。遵循此流程可有效缓解磁盘压力,避免盲目重装系统。

Windows10系统怎么显示此电脑和控制面板
系统平台 · 2026-08-27

Windows10系统怎么显示此电脑和控制面板

Windows10默认可能不显示桌面图标,导致找不到“此电脑”和“控制面板”。只需进入个性化设置,在“桌面图标设置”中勾选对应选项即可恢复。本文提供详细图文步骤,帮助快速找回系统入口。