如何确定可用(未使用)共享内存的数量?

How to determine amount of available (unused) shared memory?

我们有需要分配大量共享内存的代码,并希望实施快速、早期检查以确定是否有足够的空闲空间来继续。我发现了许多不同的方法,据说可以为您提供有关共享内存的信息,但似乎都存在问题。到目前为止,这是我尝试过的:

ipcs -lm

在我的工作站上,这个 returns 最大总共享内存为 18014398442373116 KB,这是荒谬的(~16 艾字节)。

ipcs -m

如果我将所有列出的段加起来,我得到大约 128 MB。好像有道理。

def /dev/shm

这显示总大小为 32G,这似乎是合理的(我有 64G RAM),但使用情况显示只有 9 mb,这与 'ipcs -m' 不相符。

free OR /proc/meminfo

在我的机器上,这些显示了大约 140 MB 的已用共享内存(更符合 'ipcs -m'),但在其他机器上它似乎没有排队,并且在那些机器上,'man free'指定共享值已过时,应忽略。

我觉得我缺少一些非常基本的东西。任何帮助将不胜感激。

编辑:为了提供更多关于这种情况的信息,这段代码 运行s 在超级计算机上,我们的代码应该是计算节点上唯一的东西 运行ning。由于没有其他东西应该分配大块内存,因此预先检查似乎是合理的。我们通常 运行 遇到的情况是一个计算节点,其上的内存未从上一个作业中完全清除。我们可以只查找现有的段,但如果有足够的空间,我们希望允许用户 运行 即使节点不干净。

试一试,如果不成功,如何处理异常或失败?否则你会冒着竞争条件的风险。