![强制释放共享内存](https://linux22.com/image/167175/%E5%BC%BA%E5%88%B6%E9%87%8A%E6%94%BE%E5%85%B1%E4%BA%AB%E5%86%85%E5%AD%98.png)
我似乎消耗了大约 10Gb 的共享内存,我相信是由我终止的进程消耗的ctrl-C
。
$ free -h
total used free shared buff/cache available
Mem: 31Gi 706Mi 1.9Gi 10Gi 28Gi 19Gi
Swap: 4.0Gi 4.0Gi 0B
这是 的输出htop
,按内存使用百分比排序:
似乎没有任何流程可以解释这一点。我确实曾经运行过一个内存密集型程序,但正如前面提到的,我杀死了它。我想再次运行它,但由于内存问题,它现在无法运行。另外,我检查了
$ ipcs -a --human
------ Message Queues --------
key msqid owner perms size messages
------ Shared Memory Segments --------
key shmid owner perms size nattch status
0x00000000 13 kevin 600 4M 2 dest
0x00000000 48 kevin 600 4M 2 dest
0x00000000 49 kevin 600 64M 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
$
我当然可以重新启动系统,但它是一台正在工作的服务器,我并不总是有物理访问权限来启动它备份。有没有办法强制释放该内存?
答案1
您可以尝试:
sync
echo 3 > /proc/sys/vm/drop_caches
这将清除系统缓冲区和缓存。如果在服务器负载不重的情况下进行会更好。
答案2
您能找出原因吗?以下内容可能对未来的其他读者有用:
我刚刚完成了内存使用情况调查。我曾经df -h
查看系统使用的内存tmpfs
,然后使用ps -eo pid,rss,trs,drs,comm
将输出复制到 Libre Calc 并总结 rss(进程占用的驻留内存,以千字节为单位;trs - 可执行代码的大小 - 变得很小,但 drs - 除可执行代码之外的内存- 比 rss 大得多,并且手册ps
没有说明它是以字节还是千字节为单位还是其他,所以我发现它没有用途)。
最后我调整了 ~100Mb 的误差范围:
available memory = total - sum (rss) - sum (used tmpfs).
PS 至于共享内存,我很惊讶ipcs
不输出带有 pid 的字节,只有一个或另一个,所以我跳过了这一部分(至少现在)。