2017-07-24 68 views
0

我的嵌入式系统运行Linux 3.10.14。内存溢出!在Linux中

运行时,我的应用程序打印出此消息。

ERR: Memory overflow! free bytes=56000, bytes used=4040000, bytes to allocate=84000 

但是当我做“自由”时,似乎我有足够的空闲内存。

/ # free 
      total used free shared buffers 
Mem:   27652 20788 6864 0   0 
-/+ buffers:  20788 6864 
Swap:   0   0   0 

错误消息的任何可能的根本原因? 或者如何使用空闲内存到最后1个字节?

如果我缺少任何信息,请发表评论。 谢谢!

+0

内核会保留一些内存为它的用途。如果内核不能分配任何内存,系统将会出现恐慌,因此它必须具有可用空间。您可以调整我不熟悉的数量。 – Robo

回答

0

根据“free”的输出,我们可以看到总共有27652个字节,使用了20788个字节,并且有6864个字节是空闲的。

从应用程序的打印,它似乎尝试分配84000个字节,但也有只有56000字节。

所以有一个问题,有多少内存做你的系统有哪些? 27652个字节或 4096000字节?

打印输出从系统中得到了什么?

+0

感谢您关注此转发。 ERR消息中的单位是字节,这意味着我的应用程序正在请求〜84KB。免费的单位是KB,这意味着我应该剩下大约6.7MB。正如你可以在免费输出中看到的,总内存是27652KB,这是正确的数字。 – Seungwhan

+0

@Seungwhan,所以在命令“free”和你的应用程序之间有很大的差距,我们假设“free”是正确的,你的应用程序malloc可能有大概6864K到5.6K的内存,那时候只有5.6K的内存,然后你尝试malloc 8.4K,所以它失败了,并释放你的应用程序mableced的内存,然后你运行命令“免费”,看到有总共6864K? – Forward