我想深入瞭解OS Linux上的虛擬內存管理。Linux上的虛擬內存大小
我真的不明白操作系統如何確定虛擬機的大小的過程。
我知道,一個32位的x86操作系統可以到3 GB的虛擬尋址空間放棄...它始終是真的嗎?
在我的情況,我有大約110 MB與物理存儲器和32位Linux和我的主要過程有一個VM尋址空間約660 MB。但是,物理內存(我的進程中的RSS)只有50 MB,因此我的物理RAM未滿。其餘的都是免費的,幾乎整個頁面都被頁面緩存使用。這似乎是一種正常的行爲。
如果我檢查/ proc/my_process_PID/SMAP,有幾個8 MB匿名VMA。
我的實際問題是我需要在代碼中做一個額外的10 MB malloc,但不幸的是OOM殺手殺死了我的進程(內存不足)...我認爲沒有更多的免費可用頁面堆的vm,不是嗎?某處存在巨大的內存泄漏嗎?
爲什麼OS不延長我的過程中VM的大小呢?
有關信息提供虛擬機的大小是無限的:-v的ulimit:無限
你的問題到底是什麼;你期望操作系統給你不存在的內存?機器是否具有頁面文件或磁盤形式的任何「支持存儲」? – wildplasser
我「不能」理解的是我的操作系統爲110 MB的物理內存提交了大約660 MB的虛擬內存,現在操作系統不允許我在進程中分配額外的10 MB。爲什麼他不將vm大小擴展到670 MB? –
660/110有六倍過度使用。這很難。但請記住:還有其他過程。 (試圖找出哪些;也許你可以在那裏削減)而操作系統想要爲新啓動的進程和緩衝區保留一些冗餘內存。 – wildplasser