簡體   English   中英

malloc在Linux中掛起

[英]malloc hangs in Linux

我在具有16 G內存和2個四核CPU的計算機上使用SUSE 10 Linux。 有8個進程正在做一些工作(CPU密集型/網絡I / O)。 其中有4個存在內存泄漏(這些是測試條件,因此此處沒有泄漏的問題)。 所有進程占用的總空間約為15.4 G,系統中只有200 MB可用空間。 幾個小時都沒事。 但是之后,malloc掛起(對於沒有內存泄漏的進程)。 卡住了超過4分鍾(請注意,CPU不是100%,但是io明顯上升了)。 現在,掛起的進程沒有問題(它沒有損壞內存)。 malloc在做什么? (它是否試圖進行碎片整理或建立交換空間)。

有指針嗎?

如果malloc()僅花費很長時間,那么您可能正在遍歷零散的空閑列表,其中許多條目已被換出。 這與低CPU,高IO和有限的可用RAM一致。

有關malloc()實現的更多信息(包括理解零散的自由列表),Wikipedia文章不錯: http : //en.wikipedia.org/wiki/Malloc#Implementations

哦,即使在測試環境中,內存泄漏也不可接受。 如您所見,它們干擾了(據您所知)沒有泄漏的程序,並浪費了您的時間。

可能很煩人,但是我建議在阻塞的過程中使用Valgrind。 可能存在您之前未檢測到的錯誤。 至少,您可能對正在發生的事情有所了解。 但是,幾個小時可能會變成幾天:/

在您使用機器之前,RAM的壽命不足。 現在,您的malloc超出了計算機的16G限制,並且系統開始交換。 但是,按照PierreBdR的提示檢查應用程序當然是個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM