一、虚拟内存swap
swap内存是用来拓展现有的内存,当运行时内存不足的时候,使用物理内存来拓展。有两种存储方式,(1)swapfile(2)swap分区
使用交换文件
这种方式适用于,已经装完系统但是没有多余分区可以用来做swap分区。
-
使用 swapon -s来查看虚拟内存使用情况,free -h也可以
- 创建一个大小为2GB的文件用于swap:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048000
# 设置此文件的权限,防止内存被非法读写:
sudo chmod 600 /swapfile
- 将此文件制作为swap文件:
sudo mkswap /swapfile
- 开启swap:
sudo swapon /swapfile
- 开机自动启用swap空间
#vim编辑/etc/fstab,添加下面这一句
/swapfile none swap default 0 0
使用交换分区
mkswap /dev/sda2
swapon /dev/sda2
# 在/etc/fstab中添加下面这一句
/dev/sda2 none swap default 0 0
启用swappiness
swappiness表示内存使用到什么程度开始使用swap,值为30则表示 使用到70的RAM的时候开始使用swap空间
之前遇到过一次内存爆满,但是swap没使用,反而io贼高,,后来发现是开了swap但是没有启用swappiness
- 查看一下当前的swappiness
cat /proc/sys/vm/swappiness
30
- 临时调整一下
sysctl vm.swappiness=40
- 想要永久调整得写入配置
vim /etc/sysctl.conf
# 输入
vm.swappiness = 40
- 使得其生效
sudo sysctl -p
二、共享内存shm
共享内存是进程间通信中最简单的方式之一。
共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。
共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改
- shm的一些点
- /dev/shm 一般是这个挂载点,也可能是tmpfs
-
在docker中使用--shm-size命令挂载的分区是/dev/shm,可以在docker的命令行中使用df -h命令查看;同时也能看到本机的物理机器上的tmpfs分区
- 遇到的问题
- 可以看见shm默认大小只有64m,这会有一些问题,比如:我在docker中使用chrome,会因为这个内存不足而崩溃
- 解决方式:
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.