kn007的个人博客
♥ You are here: Home > 软件与网络 > VPS > 合理化管理SWAP交互区

合理化管理SWAP交互区

by | 69 Comments

提醒:本文最后更新于 3459 天前,文中所描述的信息可能已发生改变,请仔细核实。

business graph我会告诉你,其实这个是标题党文章么。。。

其实我也不懂合理化管理,只是有些想法而已。

首先,祝大家国庆快乐。是这样的,换了VPS,相信这件事基本上大家都知道了。然后经过硬盘速度测试,妈蛋,才10几MB/s。坑爹的要命,经过修改大部分程序,现在基本上缓存都是保存在内存里面。但XEN有个虚拟内存,SWAP区。因为我大多数程序都优先Cache化,所以经常,SWAP区有时被Nginx或者PHP-FPM占用了部分了。

于是心生想法,禁用SWAP区。只用内存,这样就解决了这些问题,并且速度也快了不少。但当服务器被攻击的时候,因为我之前没限定最大进程(可以这么说),导致内存用完,没有SWAP做缓冲,System Halted,宕机了。所以我想了下,写了个脚本,通过检测实际内存占用(即真实内存使用)的大小,当使用超过1.5G(我是2G内存),启动SWAP区做缓冲,并邮件通知。当内存占用降低时,禁用SWAP区。如此,便解决了这个问题。

主要shell命令(算是原创吧,欢迎挑错):

FREE_MEM=$(free -m | grep - | awk '{print $3}')
SWAPON=$(free -m | grep Swap | awk '{print $2}')
if [ $FREE_MEM -lt 1536 ] ;then
        [ $SWAPON -ne 0 ]&&swapoff -a
else
        [ $SWAPON -eq 0 ]&&swapon -a
fi

关于如何测试VPS的硬盘速度,大家可以看这里:传送门

现在在网络上流传着好几种测试磁盘读写速度的DD命令,很多不大理解DD命令的朋友通常会把数值结果作为判断磁盘读写速度的标准,但实际上,因为不同的DD命令的参数不同,同样的磁盘会有不同的数值结果。通常大家使用的有如下四个命令,下面帮助大家解析一下这几个命令。

dd bs=1M count=128 if=/dev/zero of=test
dd bs=1M count=128 if=/dev/zero of=test; sync
dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
dd bs=1M count=128 if=/dev/zero of=test oflag=dsync

这四个命令的区别在于内存中写缓存的处理方式。

1.dd bs=1M count=128 if=/dev/zero of=test
没有加任何参数,dd默认的方式不包括“同步(sync)”命令。也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。所以以上命令只是单纯地把这128MB的数据读到内存缓冲当中(写缓存[write cache])。所以你得到的将是一个超级快的速度。因为其实dd给你的只是读取速度,直到dd完成后系统才开始真正往磁盘上写数据,但这个速度你是看不到了。所以如果这个速度很快,先不要偷着乐。

2.dd bs=1M count=128 if=/dev/zero of=test; sync
和前面1中的完全一样。分号隔开的只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。

3.dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,所以这时候你得到的是读取这128M数据到内存并写入到磁盘上所需的时间,这样算出来的时间才是比较符合实际的。

4.dd bs=1M count=128 if=/dev/zero of=test oflag=dsync
加入这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取1M后就要先把这1M写入磁盘,然后再读取下面这1M,一共重复128次。这可能是最慢的一种方式了,因为基本上没有用到写缓存(write cache)。

那我们到底应该用哪一种呢?建议使用dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync因为这种方式最接近计算机实际操作,所以测出来的数据最有参考价值。

转载请注明转自: kn007的个人博客 的《合理化管理SWAP交互区

donate
有所帮助?
Tags: ,
Comments
69 Comments立即评论
  1. LV1
    回复

    朋友们国庆玩的开心吗

  2. LV2
    回复

    好像我用过的VPS都是不允许对SWAP进行操作的...

    1. MOD
      回复

      @Aivier: 好吧,没实权

  3. LV4
    回复

    使用SWAP,每月IO轻松上600万。swap分区不到万不得已,还是不开为妙。这玩意儿巨吃IO,一般送了swap的VPS的IO都不佳

    1. MOD
      回复

      @郑杰: IO极度不行啊。太慢了,拖垮了性能

  4. LV2
    回复

    感觉这和远程电动玩具一样... :evil:

    1. MOD
      回复

      @Muno: 额。。。怎么说。。

    2. LV5
      回复

      @kn007: 手机就能控制 :mrgreen:

    3. MOD
      回复

      @老猫Music: :o 手机安装个ssh软件就可以控制VPS了...

  5. 回复

    swap分区不宜过大,因为sd卡的读取速度实在太慢,设置太大的话,会有太多数据滞留在卡内,拖慢慢系统速度。笔者曾经就设置过288mb的swap,应用程序是很少关闭了,但使用时间一长,会导致机器卡到完全无法操作,因为太多数据滞留在SD卡里,SD卡的读卡速度是系统的最大瓶颈,这时必须手动关闭程序释放内存才能正常使用,这样就得不偿失了,所以大家还是要按照自己的使用需求,合理设置swap大小和swappness的数值。

    1. MOD
      回复

      @2047252358: 这不是手机也不是相机,也不是交换机。。。 :o sd卡只适合一些随机存储,也就是cache

  6. LV1
    回复

    真能折腾

    1. MOD
      回复

      @鲜活: 哈,还好吧

  7. 回复

    还在虚拟主机混

    1. MOD
      回复

      @罗胜: 不折腾的话还是虚拟主机比较好

  8. 回复

    技术都高,佩服。

    1. MOD
      回复

      @海涛: 没有没有,过奖

  9. 虚拟主机也不错的吧

    1. MOD
      回复

      @海棠秋客: 额,不明所说。各有所需

  10. LV3
    回复

    七七,我看中一款国外的收费主题了,好不容易网上找到了资源下下来了,试用了下,后台主题选项那有一个地方报错,帮我看看呗,嘿嘿~~
    再就是根据主题提供的pot文件可以汉化前台页面,后台主题选项那肿么汉化啊,鸟语看着真心不爽

    1. MOD
      回复

      @CrazyM: :o 肯定有setting界面啊,看下有没有mo这些,没有就直接改源码里面的英文

;-):|:x:twisted::smile::shock::sad::roll::razz::oops::o:mrgreen::lol::idea::grin::evil::cry::cool::arrow::???::?::!: