1. 程式人生 > >雲端Ubuntu:Virtual memory exhausted:Cannot allocate memory

雲端Ubuntu:Virtual memory exhausted:Cannot allocate memory

在雲端ubuntu下編譯程式出現了command :"Virtual memory exhausted:Cannot allocate memory",我用df-h檢視裝置記憶體的時候還顯示有很多啊~在網上查了一下說是虛擬記憶體不夠,這在本地當然不會發生,因為本地有好多好多記憶體呢,但是亞馬遜的雲伺服器未給你分配虛擬記憶體,所以可以通過自行增加虛擬記憶體的方法予以解決。將步驟總結了如下:

(1)用free或command free 檢視系統記憶體使用情況(Linux下一般用command free)

圖片2.png

從應用程式的角度來說,可用記憶體=系統free( memory+buffers+cached.),如上圖:971732=956856+2132+12744
swap:表示硬碟上交換分割槽的使用情況,此處為0

(2)確定硬碟的最佳塊大小,為下面的塊拷貝做準備,通過測試發現,塊大小為1024個位元組時拷貝速度最快

#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

#dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

#dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

#dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

圖片3.png

(3)sudo dd if=/dev/zero of=/swapfile bs=1024 count=3M(bs為塊大小,上一步驟已測試;count為拷貝次數。count和bs都是可調的~最終建立一個3M*1024個位元組大小的檔案)

(4)sudo mkswap /swapfile(把這個檔案變成swap檔案)
(5)sudo swapon /swapfile(啟用這個swap檔案)
(6)echo "/swapfile  swap  swap  sw  0  0"  >> / etc / fstab(編輯/etc/fstab檔案,使在每次開機時自動載入swap檔案)
再次使用command free命令檢視記憶體:

圖片4.png

可以看到swap一欄裡已經增加31457124個位元組了~