了解Ubuntu,Buffer,Cached内存中的内存使用情况

时间:2016-12-26 07:54:51

标签: c linux ubuntu memory

我为大帖子道歉,解释我的问题确实是必需的。请耐心等待。

我在Linux(Ubuntu)中开发了一个基于 C 的商业应用程序已有1年多了。我的目标是使其高度稳定,并且必须运行无限时间而不会出现任何系统错误。

我面临的主要问题是内存不足。程序运行大约8个小时,之后我看到它开始使用 swap 内存。然后一切都开始执行有点慢。

我想到的第一件事就是内存泄漏。我使用Valgrind,代码审查来检查内存泄漏。我在Valgrind模式下以循环模式对我的应用程序施加了大量负载几个小时,一些测试通过,一些测试失败,但我没有看到内存泄漏或无效访问。我可以确认我的应用程序中没有内存泄漏。

我使用顶部免费命令查看内存使用情况。 free -m 命令输出如下所示。

             total       used       free     shared    buffers     cached
Mem:          7858       2146       5712        426         11        759
-/+ buffers/cache:       1375       6483
Swap:         8062          0       8062

这是初始状态,消耗的内存较少。 在我开始申请之后,我确实等了5分钟。然后 free -m 输出显示如下。

             total       used       free     shared    buffers     cached
Mem:          7858       3611       4247        563         71       1892
-/+ buffers/cache:       1647       6211
Swap:         8062          0       8062

如果你看到差异,它真的很大。最初使用的内存为2146 MB,运行5分钟后,使用的内存为3611 MB。差异是1465 MB,大约1GB +。我相信目前我的应用程序不使用1GB + RAM。内存的主要部分可能是缓存部分。

如果您看到缓存列(最后一个),则可以看到1133 MB的差异。

你也可以看到缓冲区(最后一列但是第二列),缓冲区增加了60。

这些值不断增加,最后使用交换内存启动系统。一旦它到达那个阶段,那么我的应用程序再维持1个房子,最后系统速度变得非常慢,所以我关闭了应用程序。

我的期望是让系统在缓存部分中存储已分配的内存段,但是当我的m / c RAM使用率为90%时,进一步的操作系统应该从缓存内存开始使用,因此10%的RAM始终存在于其他内存中应用。是否有任何操作系统级别的配置,我可以设置一个上限,当RAM即将耗尽时,缓存/缓冲区应该开始产生内存。

是否有任何配置,严格地说我会对操作系统说不使用交换内存。是/ proc / sys / vm / swappiness文件,我可以将默认值60更改为0,这会导致任何问题。

请引导我提出宝贵的意见。

0 个答案:

没有答案