今天在调用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>