如何快速查看共享内存

使用ipcs -m命令可查看系统当前共享内存段信息,包括ID、拥有者、权限、大小等,需在Linux终端执行,管理员权限可查看全部细节。

在Linux系统中,共享内存是进程间通信(IPC)的重要方式之一,通过系统命令,管理员可以查看共享内存的分配状态、使用情况及资源细节,以下是详细的操作指南:

如何快速查看共享内存


核心命令:ipcs

ipcs(IPC Status)是查看共享内存的核心工具,提供三类IPC资源信息:

ipcs -m  # 专查共享内存(-m: shared memory)

输出解析

------ 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:当前附加进程数
  • statusdest表示段标记为删除(进程分离后销毁)

常用组合命令

如何快速查看共享内存

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等)。

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

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月11日 12:15
下一篇 2025年6月11日 12:25

相关推荐

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN