腾讯云vps开启Swap时的一点吐槽

所谓swap就是我们常说的交换分区,也就是虚拟内存,虚拟内存是一种操作系统为了节省物理内存使用的一种技术,他是使用一块划分好的磁盘分区将其作为内存来使用,当我们的操作系统的物理内存不够用的时候会将一些挂起状态的进程使用的内存页置换到交换分区当中,从而节省物理内存资源,当进程被唤醒访问的内存页不在物理内存当中,会触发缺页异常将交换分区中的页数据重新置换到物理内存当中。

由于虚拟内存依赖于硬盘,相关操作会导致额外的IO开销,特别是,如果内存使用率已经非常高,而同时IO性能也不是很好的情况下,该机制其实会起到相反的效果。

不仅系统性能提升较小(因为内存使用率已经非常高了),而且由于频繁的内存到SWAP的切换操作,会导致产生大量额外的IO操作,导致IO性能进一步降低,最终反而降低了系统总体性能。内存与磁盘性能有10倍以上的差距。Mysql等业务当内存数据临时保存到SWAP分区时,数据库的整体服务质量会大大下降。为了保证您业务的正常运行,当服务器内存不足时,建议您增加内存空间。

开启的方式(详见官方原文):

  • 查看系统当前的分区情况free -m
  • 创建用于交换分区的文件dd if=/dev/zero of=/xxx/swap bs=4096 count=1572864,这个大概在6G左右,我们的云server物理内存在1G的情况下写2G就够了
  • 设置交换分区文件mkswap /xxx/swap
  • 启用交换分区文件swapon /xxx/swap
  • 若要想使开机时自启用,则需修改文件/etc/fstab中的swap行echo “LABEL=SWAP-sda /xxx/swap swap swap defaults 0 0” >> /etc/fstab
  • 删除swapswapoff /xxx/swap ; rm -f /Application/swap

在使用dd的时候我就发现云服务器的磁盘性能真的是。。。

1
2
3
4
$ sudo dd if=/dev/zero of=/swap/swap bs=4096 count=572864
记录了572864+0 的读入
记录了572864+0 的写出
2346450944字节(2.3 GB)已复制,51.96 秒,45.2 MB/秒

本地的磁盘也比云服务器的io性能好呀:

1
2
3
4
$ sudo dd if=/dev/zero of=/swap/swap bs=4096 count=572864
记录了572864+0 的读入
记录了572864+0 的写出
2346450944 bytes (2.3 GB, 2.2 GiB) copied, 20.5086 s, 114 MB/s

瞄一眼监控,嘿嘿

关闭swap也是有原因的。。。

坚持原创技术分享,您的支持将鼓励我继续创作!