如何快速查看共享内存
- 主机动态
- 2025-06-11
- 5
在Linux系统中,共享内存是进程间通信(IPC)的重要方式之一,通过系统命令,管理员可以查看共享内存的分配状态、使用情况及资源细节,以下是详细的操作指南:
核心命令:ipcs
ipcs(IPC Status)是查看共享内存的核心工具,提供三类IPC资源信息:

输出解析:
------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 65536 user 600 4096 2 dest 0x0000abcd 98305 mysql 660 1024000 4
- key:共享内存唯一标识(0x0表示私有)
- shmid:共享内存ID(操作时使用)
- bytes:内存段大小(字节)
- nattch:当前附加进程数
- status:dest表示段标记为删除(进程分离后销毁)
常用组合命令:

ipcs -m -l # 查看系统共享内存限制(max size, max segments等) ipcs -m -c # 显示创建者信息 ipcs -m -t # 输出最后操作时间
查看实时使用情况
top / htop 动态监控
运行top后按M(大写)按内存排序,共享内存占用计入进程的RES(常驻内存):

PID USER RES SHR %MEM COMMAND 1234 mysql 1.2g 900m 15.3 mysqld
- SHR:共享内存+其他共享资源(如动态库)
free 查看系统内存分布
free -m
输出中的shared行显示所有共享内存总量:
total used free shared buff/cache available Mem: 7982 2100 3200 845 2682 4521
进阶工具与技巧
按进程查看共享内存映射
# 通过进程ID查看映射的共享内存段 pmap -x 1234 | grep shm # 示例输出: 00007f3d4aa00000 10240K rw-s- shmid=0x98305 (deleted)
- shmid后显示共享内存ID,deleted表示已标记删除但仍有进程使用
统计共享内存总量
ipcs -m | awk '$5 ~ /^[0-9]+$/ {sum+=$5} END {print "Total Shared Memory:", sum/1024/1024, "GB"}'
图形化工具
- nmon:运行nmon后按m查看内存详情(含共享内存)
- gnome-system-monitor:GUI工具中“资源”选项卡可查看共享内存
清理共享内存(谨慎操作)
️ 操作需root权限,误删可能导致进程崩溃
# 删除指定ID的共享内存段 ipcrm -m 98305
删除所有无人使用的共享内存
ipcs -m | awk ‘/0 0/ {print $2}’ | xargs -I{} ipcrm -m {}
--- ### **五、常见问题排查** 1. **`ipcs`无输出?** - 可能无共享内存分配,或权限不足(尝试`sudo ipcs -m`) 2. **共享内存无法释放?** - 检查`nattch`(附加进程数):若 >0 表示仍有进程占用 - 检查`status`:`dest`状态需等待进程分离 3. **`Cannot allocate memory`错误?** - 检查系统限制:`cat /proc/sys/kernel/shmmax`(单个段最大值) - 调整限制(临时):`sysctl -w kernel.shmmax=2147483648` --- ### **注意事项** - **生产环境操作前备份数据**,删除共享内存可能导致进程异常 - 共享内存大小受`/proc/sys/kernel/shmmax`和`shmall`限制 - 数据库(如MySQL、Oracle)及缓存服务(Redis)是共享内存的常见使用者 基于Linux内核文档([kernel.org](https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html))及`man`手册(`man ipcs`, `man shm_overview`),结合系统管理实践整理,命令适用于主流Linux发行版(CentOS, Ubuntu等)。