一、前情
阿里云2G内存不够用,启动几个项目就全占满了
另外服务器没有swap虚拟内存
什么是SWAP?
Linux的内存分为 物理内存 和 虚拟内存,虚拟内存(SWAP)也叫交换区、交换分区等。当运行程序,产生进程时。系统会判断当前物理内存是否还有空闲内存 以允许进程调入内存运行,如果有那么 则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到SWAP中等待,然后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出SWAP扮演了一个非常重要的角色,就是暂存被换出的进程。当物理内存使用完或者达到一定比例之后,系统会自动使用SWAP做临时的内存使用。当物理内存和SWAP都被使用完那么就会出错:out of memory
对于使用多大比例物理内存之后开始使用SWAP,在系统的配置文件中可以通过调整参数进行修改。
cat /proc/sys/vm/swappiness
默认是 60 ,一般不需要更改,当数值为 0 的时候,就会尽量使用物理内存直到用完才会使用SWAP,当数值为100 的时候,就会尽量使用SWAP。SWAP是从硬盘中虚拟出来的,所以速度由硬盘的读写速度决定,如果你的Linux服务器IO很低,硬盘是 HDD或者石头盘钻石盘,那么效果会很差。如果你的VPS没有SWAP,那么添加一些可能会提高性能,但不建议添加太多,否则也是浪费,而且SWAP始终是硬盘虚拟的,比不上物理内存。
二、操作
- 使用root用户登陆linux
- 先分出一个1G的硬盘
[root@iZ2ze77erlloowxo7d3ydrZ var]# dd if=/dev/zero of=/var/swapfile bs=1024 count=1024000
1024000+0 records in
1024000+0 records out
[root@iZ2ze77erlloowxo7d3ydrZ var]# du -ah /var|grep "swapfile"
1000M /var/swapfile
- 初始化硬盘为swap格式
[root@iZ2ze77erlloowxo7d3ydrZ var]# mkswap /var/swapfile
mkswap: /var/swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1000 MiB (1048571904 bytes)
no label, UUID=3542eeae-bb25-4668-96c3-448d68b32215
[root@iZ2ze77erlloowxo7d3ydrZ var]# swapon /var/swapfile
swapon: /var/swapfile: insecure permissions 0644, 0600 suggested.
#开机启动
[root@iZ2ze77erlloowxo7d3ydrZ var]# echo "/var/swapfile swap swapdefaults 0 0" >> /etc/fstab
- 查看下
[root@iZ2ze77erlloowxo7d3ydrZ var]# free -h
total used free shared buff/cache available
Mem: 1.8Gi 1.4Gi 67Mi 2.0Mi 322Mi 243Mi
Swap: 999Mi 0B 999Mi
- 删除swap
[root@iZ2ze77erlloowxo7d3ydrZ var]# swapoff /var/swapfile
#取消开机启动加载
sed -i "/var/swapfile" /etc/fstab
#解除占用空间
rm -rf /var/swapfile