用Swap加速你的Ubuntu

背景

10 年的 MacBookPro 2010 (4G 内存,2 代 i5,换过 SSD) 还是 MacOSX 时候接口接触不良,开机就卡死。风扇呼呼,非常非常卡。而且 MacOS 已经对它停止支持了。一度想扔掉。然后突发奇想安装了 Ubuntu20.10 ,结果所有毛病都消失了。。。。

原来这就是“计划性报废”。

参数表:
Intel® Core™ i5-2415M CPU @ 2.30GHz × 4 
3.8 GB 
Intel® HD Graphics 3000 (SNB GT2)
SSD:  Sandisk 240G

Ubuntu 20.10

安装 Ubuntu 之后

接口能用了,不再接触不良,拷贝速度 30-40M/s 。一切工作正常,驱动也没问题——硬件足够老了可能。

但是就是有一个问题。电脑的内存太小了 4G,开个 IDE ( Pycharm 、Rubymine )就吃力了,作为生产力差点意思。

Swap 分区的问题

安装系统默认的 Swap 分区是 2G,也就是内存的一半。网上总流传一个 swap 的配置:

  • 如果内存很小(<4GB),设为内存大小

  • 如果内存很大(>=4GB),设置为内存的一半

多多少少大家都能搜到。其实这个很有问题—— 这个可能是作为服务器来思考的。有的文章甚至提倡直接下掉 swap 分区来减少 swap 降低的速度带来的副作用。

但是多年前的文章怎么能指导今天的情况。我这台老电脑,我试着把电脑 swap 分成 8G (内存的 2 倍)。结果很有趣。粗略狂开了一下,同时运行这些程序

Thunderbird (更新邮件) x1
终端 x2
火狐 13 个 tab
sublime x1 项目
bt 下载 x2
vscodex1 项目
pycharm pro ide x2 项目
ruby mine ide x1 
pdf 文档 x4 本书
wordx3 文档
emacs x1
ppt x1 文档
数据库图形 x1
表格 x1
vlc 播放电影(不卡)
Chromex1  2 个 tab

2021-01-30 15-48-49 屏幕截图.png

2021-01-30 15-42-45 屏幕截图.png

8G 的 swap 分区才被占据了一半。

依然可以正常运行。CPU 远远不到瓶颈,因为 CPU 跑满顶多是多等一会,一切都不会失去响应。内存才是瓶颈。

侧面印证一些文章里提到的 Linux 在内存被塞满会报错,出现一些异常,系统会变慢。我猜测,其中内存和 swap 分区都满了之后,频繁的 GC(垃圾回收)其实是系统卡的重要原因。

作为桌面 ,即使程序都经过 swap 慢一点也无所谓,庞杂的 app 跑在机器上,频繁的 GC 才是灾难。和跑单一服务的服务器有些不同。内存如果可以,尽量给多,空间换时间。

如此这般作为生产力也可以顶一阵子了。

设置 swap 的方法

可以参考 change_swap_size_ubuntu

我后来 SWAP 设置为 16G 准备起飞。本身就是 SSD,这样省买内存了。非常惊喜。

感兴趣的小伙伴可以把你手里的旧电脑变废为宝。

补充

还有一些文章,提到了多硬盘可以设置 swap 阵列,优先级以来提高性能。

Mark24

Everything can Mix.