KVM 虚拟化的服务器建立 SWaP 分区以增加虚拟内存
本文最后更新于 243 天前,其中的信息可能已经有所发展或是发生改变。

1. 关于 SWaP 虚拟内存分区

1.1 什么是 SWaP

它可以是一个分区,也可以是一个文件,是操作系统中一个存放从内存中置换(swap 动作)出的数据的地方,也就是所谓的虚拟内存。

1.2 为什么需要 SWaP

  1. 解决服务器上系统资源占用峰值程序崩溃的问题:当物理内存不够用时候,会根据特定的算法,把一部分内存交换到 SWaP 分区。
  2. 保证服务器在即将到来的大内存请求时有足够的剩余资源:kswapd 进程会周期性地对内存进行检查,如果发现占用高于水位线,则触发 swap(动作),以保证系统剩余的内存不会很少。

1.3 什么场景下需要 SWaP

  1. 系统资源占用峰值时会占满 100% 的内存且持续时间并不长。
  2. 对服务器上的软件、服务运行稳定性有要求。
  3. 磁盘足够的任何情况下,有什么理由不添加虚拟内存呢?

1.4 对于 SWaP 分区该设置多大的建议

Red Hat 官方文档:Chapter 15. Swap Space

服务器内存大小 建议的 SWaP 分区大小
≤ 2 GB 2 倍内存大小
> 2 GB 且 ≤ 8 GB 1 倍内存大小
> 8 GB 且 ≤ 64 GB 至少 4 GB
> 64 GB 至少 4 GB

1.5 通过 OpenVZ 虚拟化出来的服务器不可以添加虚拟内存

在其他网站上流传的所谓 OpenVZ 虚拟 VPS 下增加 SWaP 分区的脚本,不过也只是欺骗 free 工具使其显示错误的数据罢了:

# !/bin/bash
# 网传的自我安慰脚本
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo

可以从两个方面得到验证:

  1. 执行脚本后磁盘可用空间并没有减少,这和 SWaP 的工作原理不符。
  2. 压测时系统 SWaP 空间占用始终为零。

2. 创建并配置 SWaP 分区

确定当前无 SWaP 分区,如果有的话清理一下:

# 一般情况下 SWaP 分区操作都在服务器根目录下执行
cd /
free -m
# 查看 SWaP 分区文件目录
swapon --show
# swapfile 为之前的分区文件名
swapoff /swapfile

然后创建新的 SWaP 分区:

# 创建分区文件,新的分区文件名为 swapfile,count 的单位为 kb
sudo dd if=/dev/zero of=/swapfile bs=1k count=2048000
# 建立 SWaP
mkswap /swapfile
# 启动 SWaP
swapon /swapfile
# 查看虚拟内存是否创建成功
free -m

63ce804689f20

设置 SWaP 分区开机自动挂载,只需要修改 /etc/fstab 文件,在最后添加一行内容即可:

sudo chmod 777 /etc/fstab
sed -i '$a /swapfile swap swap defaults 0 0' /etc/fstab

你可以对磁盘测下速,测出来的 IO 也就是你虚拟内存的带宽:

time dd if=/dev/zero of=/test.disk bs=8k count=30000

63ce87aae8c3b

而实际的内存带宽测速结果:

# 下载和编辑 mbw 测试软件
git clone http://github.com/raas/mbw
cd mbw
yum -y install gcc
make
# 测试
./mbw -q -n 10 256

63ce88ee5a035

即使是这种超售严重、内存带宽打折扣的廉价 VPS 两者速度都差了 10 倍。

3. 后记

在我这里添加 SWaP 分区只是作为不让程序因为内存不足而崩溃的一种兜底手段,如果监控上显示 SWaP 分区长时间被占用,绝大多是情况下我会去主动降低这台服务器的负载或是去升级配置,系统的稳定远比坚守原配置带来的节约值钱得多。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇