Swap定义
在Linux系统中,交换空间(Swap)是虚拟内存的一部分,它用于在物理内存(RAM)不足时存储数据。当系统的物理内存被占满时,操作系统会将一些不常用的内存页移动到交换空间,从而为当前运行的程序释放内存空间。这个过程称为“交换”(swapping)。
交换空间的作用
- 内存管理:当系统运行的程序需要更多内存时,交换空间允许系统将部分内存数据暂时存储到磁盘上,以便为其他程序腾出空间。
- 防止系统崩溃:如果没有交换空间,当物理内存耗尽时,系统可能无法正常运行新程序或处理数据,甚至可能导致系统崩溃。交换空间提供了一种防止内存耗尽的机制。
- 提高系统稳定性:通过将不活跃的内存页移动到交换空间,系统可以保持运行,即使在内存使用率很高的情况下。
启用Swap步骤
1. 检查是否已有Swap空间
你可以使用以下命令检查当前是否已经存在Swap空间:
swapon --show
2. 创建Swap文件
首先,创建一个空的Swap文件。假设你想创建一个2GB的Swap文件:
sudo fallocate -l 2G /swapfile
如果你的系统没有fallocate命令,可以使用以下命令来创建Swap文件:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
3. 设置正确的权限
确保只有root用户可以访问Swap文件:
sudo chmod 600 /swapfile
4. 将文件格式化为Swap区域
接下来,将这个文件格式化为Swap空间:
sudo mkswap /swapfile
5. 启用Swap文件
启用新创建的Swap文件:
sudo swapon /swapfile
6. 持久化设置
为了在重启后自动启用Swap文件,需要将其添加到/etc/fstab中:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
7. 调整Swap行为(可选)
你可以通过调整swappiness值来控制系统使用Swap的频率。默认值通常为60,但你可以根据需要调整:
sudo sysctl vm.swappiness=10
这会将swappiness设置为10,表示只有在内存几乎用完时才会使用Swap。
你可以将这一设置添加到/etc/sysctl.conf文件中以使其永久生效:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
实战效果
新服务器上没有设置Swap,理论内存只有2G。在运行一个命令后,发现终端反应特别卡,通过top命令发现内存基本上快耗尽了,而且kswapd0的CPU占用率超高(如果在系统监控工具中看到 kswapd0
占用了较高的 CPU 或 I/O 资源,这可能表明系统正在经历内存压力,可能需要增加物理内存或优化内存使用),判断服务器明显内存不足。
不想增加服务器预算,既然没有设置Swap,那当然首要就是先设置Swap了。当服务器缓过来后,开启2G的Swap,再次运行同样的命令,top显示Swap被使用,不卡、丝滑~~
发表回复