强制释放共享内存

强制释放共享内存

我似乎消耗了大约 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 的字节,只有一个或另一个,所以我跳过了这一部分(至少现在)。

相关内容