繁体   English   中英

使用C ++查找32位Linux中进程可用的剩余内存

[英]Find remaining memory available to a process in 32 bit Linux using C++

我的C ++程序缓存了许多对象,并且在每个主要API调用的开始,我想确保至少有500 MB可用于该API调用。 我可能用完了RAM +交换空间(考虑具有1 GB RAM + 1 GB SWAP文件的系统),或者我在处理过程中可能用完了虚拟地址(我可能已经在总4GB中使用了3.7 GB地址空间)。 我很难估计要缓存的数据量,但是如果它成为问题,我可以清除其中的一些数据,然后反复进行,直到在系统或地址空间中有500 MB可用空间(以瓶颈为准)为止。 所以我的要求是在32位Linux上的C ++中找到:

A)查找多少RAM + SWAP空间可用。
B)我的进程有多少用户空间地址空间可用。
C)该进程已使用了多少虚拟内存。 认为它类似于Windows上进程的“提交大小”或“工作集大小”。

任何答案将不胜感激。

查看/ proc / vmstat,有很多有关系统范围内存的信息。

/ proc // maps将为您提供有关进程内存布局的大量信息。

请注意,如果您在长时间运行之前检查内存,则另一个进程可能会耗尽所有可用内存,并且程序可能仍然崩溃!

我对您的缓存类一无所知,但是如果这些对象很小,您可能已经覆盖了new / delete运算符。 这样,很容易跟踪内存消耗(至少通过计数对象)为什么不更改缓存策略? 并冲洗旧的未使用的对象。

另一个丑陋的方法是尝试分配几块内存,看看程序可以分配它,然后释放它。 在32位上,它可能会失败,因为堆可能会碎片化,但是如果可以,请确保此时有足够的内存。

看一下vmstat的来源: 这里 然后搜索domem()函数,该函数收集有关内存的所有信息(已占用和空闲)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM