我为大帖子道歉,解释我的问题确实是必需的。请耐心等待。
我在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,这会导致任何问题。
请引导我提出宝贵的意见。