2017-07-24 66 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