阿里云服务器使用了4核8G内存配置,但最近由于jenkins构建时执行gradle打包安卓应用,导致即时的内存严重不足,线上应用长时间无法访问。
执行free命令才发现,swap分区一直是没有创建的。两台ubuntu都是这样。阿里云服务默认没有预创建交换分区!
1.使用系统盘创建块文件
admin@ubuntu:~# dd if=/dev/zero of=/mnt/swap bs=1M count=4096 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 69.7764 s, 61.6 MB/s
2.使用快文件创建分区
admin@ubuntu:~# mkswap /mnt/swap Setting up swapspace version 1, size = 4194300 KiB no label, UUID=e7b06ac4-79c4-4d01-a5b3-6bda61866939
3.启用swap分区
admin@ubuntu:~# swapon /mnt/swap
4.查看内存状态
admin@ubuntu:~# free -h total used free shared buffers cached Mem: 7.8G 7.7G 131M 22M 3.9M 1.8G -/+ buffers/cache: 5.8G 2.0G Swap: 4.0G 0B 4.0G
5.设置开机自动挂载
admin@ubuntu:~# vim /etc/fstab
6.配置swap使用策略
# echo "vm.swappiness = 50"> /etc/sysctl.conf
# sysctl -p
对于swap争议
使用swap分区可以避免内存严重不足时的进程僵死现象;只要内存足够,就不会使用swap频繁读写。
一些进程是按需加载进物理内存的,比如jenkins构建,在构建进程停止后,jenkins服务占用的内存数据会被写入交换分区。下次构建时再移入物理内存。