我们的代码需要分配大量的共享内存,并且希望快速进行早期检查以确定是否有足够的可用空间继续。我发现了许多不同的方法可以为你提供有关共享内存的信息,但似乎都有问题。这是我到目前为止所尝试的内容:
ipcs -lm
在我的工作站上,这将返回最大总共享内存18014398442373116千字节,这是荒谬的(约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'指定共享值已过时,应忽略。
我觉得我错过了一些非常基本的东西。任何帮助将不胜感激。
编辑:为了提供有关情况的更多信息,此代码在超级计算机上运行,其中我们的代码应该是计算节点上唯一运行的代码。由于没有别的东西可以分配大块的内存,所以前期检查似乎是合理的。我们通常遇到的情况是一个计算节点,在该计算节点上,内存未从上一个作业中完全清除。我们可以只查找现有的段,但如果有足够的空间,我们希望允许用户运行,即使节点不干净。
答案 0 :(得分:1)
如果没有成功,试试它并处理异常或失败怎么样?否则你就会冒着竞争的风险。