内存不够用?在Linux上使用swapfile配置交换空间
前言 几个月前我还兴高采烈写了篇文章说给笔记本升级了内存配置,从乞丐版的4G一跃成为16G高富帅,然而,这几个月来我备受电脑死机的折磨,我现在有理由怀疑我可能买了假的内存条,于是没有办法,只能换回原厂的4G内存条,~~(然后准备赚部台式机)~~,问题不大。 换上4G内存条之后效果显著,只开了一个谷歌浏览器,内存占用就已经到了80%了,JB家的IDE是决计不敢再用了,可是这样还是难以满足系统对内存空
目录10 个章节
前言
(本文最初写于2017年)
几个月前我还兴高采烈写了篇文章说给笔记本升级了内存配置,从乞丐版的4G一跃成为16G高富帅,然而,这几个月来我备受电脑死机的折磨,我现在有理由怀疑我可能买了假的内存条,于是没有办法,只能换回原厂的4G内存条,(然后准备赚部台式机),问题不大。
换上4G内存条之后效果显著,只开了一个谷歌浏览器,内存占用就已经到了80%了,JB家的IDE是决计不敢再用了,可是这样还是难以满足系统对内存空间渴求,这时候就只能配置交换空间了。(也就是虚拟内存)
Swap概念
Swap分区(也称交换分区)是硬盘上的一个区域,被指定为操作系统可以临时存储数据的地方,这些数据不能再保存在RAM中。 基本上,这使您能够增加服务器在工作“内存”中保留的信息量,但有一些注意事项,主要是当RAM中没有足够的空间容纳正在使用的应用程序数据时,将使用硬盘驱动器上的交换空间。 写入磁盘的信息将比保存在RAM中的信息慢得多,但是操作系统更愿意将应用程序数据保存在内存中,并使用交换旧数据。 总的来说,当系统的RAM耗尽时,将交换空间作为回落空间可能是一个很好的安全网,可防止非SSD存储系统出现内存不足的情况。
检查系统信息
在开始之前,我们可以检查系统是否已经有一些可用的交换空间,可能有多个交换文件或交换分区,但通常应该是足够的。我们可以通过如下的命令来查看系统是否有交换分区:
sudo swapon --show
如果没有任何结果或者没有任何显示,说明系统当前没有可用的交换空间。free命令用来查看空闲的内存空间,其中包括交换分区的空间。
free -h
检查硬盘驱动器分区上的可用空间
为swap分配空间的最常见方式是使用专门用于具体某个任务的单独分, 但是,改变分区方案并不是一定可行的,我们只是可以轻松地创建驻留在现有分区上的交换文件。
在开始之前,我们应该通过输入以下命令来检查当前磁盘的使用情况:
df -h
重要提示
(2024-2-18 补充)
本文使用的创建 swap 文件的方法适用于 ext4 文件系统,如果你使用的是 ZFS/btrfs 这类日志文件系统,请慎用本文的方法,我测试了 ZFS 下是不能用这种方式创建 swapfile 的,会提示 swapfile has holes 不给用。
换成 fallocate 命令创建 swapfile 也不行
参考资料
- https://askubuntu.com/questions/1198903/can-not-use-swap-file-on-zfs-files-with-holes
- https://askubuntu.com/questions/1327500/swap-file-hard-disk-it-appears-to-have-holes
创建swap文件
由于这个系统我已经用了很久了,并且磁盘上并没有空闲的分区可以用,所以我选择手动创建一个swapfile来充当交换空间。
据说交换空间的大小一般是内存的两倍,我现在只有4g的内存空间,于是当然要创建一个8G大小的交换空间了。 使用以下命令创建swapfile
sudo fallocate -l 8G /swapfile
经过测试,OpenSuSE系统要使用以下命令才能成功创建 swapfile
(2024-2-18 补充)似乎是因为当时使用的是 Btrfs 文件系统,所以得用
dd命令创建,理论上fallocate命令应该也可以,但记得把 swapfile 设置为不跟踪,不然可能会影响性能。
sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
使用以下命令查看是否正确创建。
ls -lh /swapfile
结果应该类似下面这样:
-rw-r--r-- 1 root root 8.0G Apr 26 17:04 /swapfile
修改swapfile权限
sudo chmod 600 /swapfile
查看效果
ls -lh /swapfile
结果应该类似下面这样:
-rw------- 1 root root 8.0G Apr 26 17:04 /swapfile
激活交换空间
sudo mkswap /swapfile
sudo swapon /swapfile
之后使用以下命令查看使用成功开启交换空间:
sudo swapon --show
结果类似下面这样:
NAME TYPE SIZE USED PRIO
/swapfile file 8G 0B -1
添加到fstab
这样每次开机系统就会自动吧swapfile挂载为交换空间。
首先请自行备份fstab文件。
然后把以下配置添加到fstab文件末尾。
/swapfile none swap sw 0 0
或者直接使用以下命令:
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
_EOF_
内存不够用?在Linux上使用swapfile配置交换空间
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
服务器时间漂移,如何开启Linux NTP自动同步
本文记录了作者在服务器运维中发现时间漂移问题,并通过启用NTP同步、使用Chrony等工具进行排查与解决的全过程。文章强调了NTP同步的重要性,介绍了排查思路和高效工具的使用,以及如何同步硬件时钟(RTC),为服务器时间精准同步提供了解决方案。
2025-10-27 · 系统配置 · 约 1 分钟
Nginx配置http跳转https-强制https访问
前言 最近上线了好几个项目,同时也申请了相应的SSL证书,不过发现了一个问题,用户在浏览器直接输入域名的时候,浏览器默认访问的是http站点,然而我们的网站只支持https访问,所以就访问不了咯。 其实可以在nginx全局配置里面把所有访问重定向到https,不过服务器有些站点是提供http服务的,所以只能每个站点分别配置。 根据搜索引擎找到的资料,本文总结了三种配置方法,有需要的朋友可以选择中意
2025-10-27 · 系统配置 · 约 1 分钟
linux配置sendmail发邮件服务
前言 因为开发需要,搞了个wiki系统,并且用到了邮件订阅,所以研究了一番发送邮件的方法。 安装 没什么好说的,先安装必要组件。 apt install sendmail-bin apt install sendmail apt install sendmail-cf #配置工具 配置sendmail sendmail默认是本机用户发送给本机,所以需要修改可以发送到整个Internet: 修改se
2025-10-27 · 系统配置 · 约 1 分钟
别再手动复制SSH公钥了,Linux服务器一键从GitHub快速导入公钥
输入GitHub用户名就自动导入SSH公钥?Ubuntu这懒人功能挺省事。原理不就是爬取`https://github.com/用户名.keys`吗?手动用`curl`也能实现,装`ssh-import-id`更高效,但谁稀罕这些花里胡哨的。
2026-03-11 · 系统配置 · 约 1 分钟
讨论
共 0 条加载评论中…