一、虛擬內(nèi)存swap
swap內(nèi)存是用來拓展現(xiàn)有的內(nèi)存,當運行時內(nèi)存不足的時候,使用物理內(nèi)存來拓展。有兩種存儲方式,(1)swapfile(2)swap分區(qū)
使用交換文件
這種方式適用于,已經(jīng)裝完系統(tǒng)但是沒有多余分區(qū)可以用來做swap分區(qū)。
-
使用 swapon -s來查看虛擬內(nèi)存使用情況,free -h也可以
image.png - 創(chuàng)建一個大小為2GB的文件用于swap:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048000
# 設(shè)置此文件的權(quán)限,防止內(nèi)存被非法讀寫:
sudo chmod 600 /swapfile
- 將此文件制作為swap文件:
sudo mkswap /swapfile
- 開啟swap:
sudo swapon /swapfile
- 開機自動啟用swap空間
#vim編輯/etc/fstab,添加下面這一句
/swapfile none swap default 0 0
使用交換分區(qū)
mkswap /dev/sda2
swapon /dev/sda2
# 在/etc/fstab中添加下面這一句
/dev/sda2 none swap default 0 0
啟用swappiness
swappiness表示內(nèi)存使用到什么程度開始使用swap,值為30則表示 使用到70的RAM的時候開始使用swap空間
之前遇到過一次內(nèi)存爆滿,但是swap沒使用,反而io賊高,,后來發(fā)現(xiàn)是開了swap但是沒有啟用swappiness
- 查看一下當前的swappiness
cat /proc/sys/vm/swappiness
30
- 臨時調(diào)整一下
sysctl vm.swappiness=40
- 想要永久調(diào)整得寫入配置
vim /etc/sysctl.conf
# 輸入
vm.swappiness = 40
- 使得其生效
sudo sysctl -p
二、共享內(nèi)存shm
共享內(nèi)存是進程間通信中最簡單的方式之一。
共享內(nèi)存是系統(tǒng)出于多個進程之間通訊的考慮,而預(yù)留的的一塊內(nèi)存區(qū)。
共享內(nèi)存允許兩個或更多進程訪問同一塊內(nèi)存,就如同 malloc() 函數(shù)向不同進程返回了指向同一個物理內(nèi)存區(qū)域的指針。當一個進程改變了這塊地址中的內(nèi)容的時候,其它進程都會察覺到這個更改
- shm的一些點
- /dev/shm 一般是這個掛載點,也可能是tmpfs
-
在docker中使用--shm-size命令掛載的分區(qū)是/dev/shm,可以在docker的命令行中使用df -h命令查看;同時也能看到本機的物理機器上的tmpfs分區(qū)
image.png
- 遇到的問題
- 可以看見shm默認大小只有64m,這會有一些問題,比如:我在docker中使用chrome,會因為這個內(nèi)存不足而崩潰
- 解決方式:
Option 1:
Run chrome with --disable-dev-shm-usageOption 2:
Set /dev/shm size to a reasonable amount docker run -it --shm-size=1g replacing 1g with whatever amount you want.

