问题引入
机器在跑某些跑某些项目或任务时,一般都需要考虑到系统的内存需要达到多少才能顺利跑完,满足要求后还是遇到内存溢出的oom异常该怎么去处理,而这个时候物理内存似乎又没用完,那么这里其实就是交换分区swap的使用不当了。
vm.swappiness参数
内核参数vm.swappiness控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系。值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。
默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区。
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;
swappiness=100的时候表示积极使用swap分区,并把内存上的数据及时搬运到swap空间。(网上有的说,对于3.5以后的内核和RedHat 2.6.32之后的内核,设置为0会禁止使用swap,从而引发out of memory,这种情况可以设置为1。)
调整vm.swappiness的方法:
1、查看参数值:
cat /proc/sys/vm/swappiness
2、临时调整:
sysctl vm.swappiness = 10
cat /proc/sys/vm/swappiness
3、永久调整:
vi /etc/sysctl.conf
修改vm.swappiness=10
然后加载参数:
sysctl -p
分区大小的设置与修改
查看现有Swap文件:swapon -s
关闭现有Swap文件:swapoff /path/to/swapfile
扩展Swap文件大小: 使用 dd 命令或者其他文件扩展工具(如 truncate)来增大Swap文件的大小。假设要将其从8GB增加到9GB:
sudo dd if=/dev/zero bs=1M count=1024 >> /path/to/swapfile
sudo truncate -s +1G /path/to/swapfile
使用上面方式来创建的交互文件可能会存在空洞的问题,推荐使用下面命令:
sudo fallocate -l /swapfile3
将 <size>
替换成所需的Swap文件大小,如 4G
表示创建一个4GB的Swap文件。fallocate
命令通常能确保创建的文件没有空洞。
重新格式化Swap文件:sudo mkswap /path/to/swapfile
启用新大小的Swap文件:sudo swapon /path/to/swapfile