shm_attach() 引起 No space left on device

本文探讨了在使用shm_attach函数时遇到Nospaceleftondevice错误的情况,通过ipcs命令分析已分配和最大共享内存容量,以及检查占用共享内存的进程。提供了重启服务器或使用ipcrm命令释放特定共享内存段的方法来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在调用shm_attach函数时返回No space left on device,查看官方文档说是共享内存已经被占光了。

用命令ipcs -mu查看已经分配的共享内存数和ipcs -ml查看最大共享内存数量,发现segments allocated和max number of segments大小相等。

[root@localhost ~]# ipcs -ml

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1

[root@localhost ~]# ipcs -mu

------ Shared Memory Status --------
segments allocated 4096
pages allocated 1440
pages resident  684
pages swapped   0
Swap performance: 0 attempts     0 successes

[root@localhost ~]#

用命令ipcs -m -p 检查占用共享内存的进程

[root@localhost ~]# ipcs -m -p

------ Shared Memory Creator/Last-op --------
shmid      owner      cpid       lpid
98304      root       1962       1984
131073     root       1950       1709
163842     root       1979       2271
196611     root       1999       1709
229380     root       2022       1709
262149     root       2244       1709
294918     root       1986       1709
327687     root       2230       1709
360456     root       2019       1709
393225     root       1986       1709
425994     root       1979       2271
458763     root       1998       1709
491532     root       2271       2273
524301     root       1974       1709
557070     root       1974       1709

返回格式为:

shmid      owner      cpid       lpid

一般cpid和lpid是一致的,在ps中查找,如果cpid和lpid都不存在,那么说明这块共享内存是没有被释放的


你可以重启服务器释放共享内存,也可以通过命令释放 ipcrm -m <shmid> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值