kn007的个人博客
♥ You are here: Home > > > 合理化管理SWAP交互区

合理化管理SWAP交互区

by | 69 Comments

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立即评论
Loading...
  1. LV1回复

    都是用的简单的命令,操作swap的不懂

    1. MOD回复

      @tennfy: 我只是想自动化合理化控制

  2. 都是技术文章。哎

    1. MOD回复

      @鬼娃娃: 额

  3. LV1回复

    我想说这都是些什么。。。

    1. MOD回复

      @咚门: 没什么,。,,

  4. 回复

    技术文章,单身我却不懂,只能路过看看。 :roll:

    1. MOD回复

      @海涛: :roll: 那就看看呗,看着看着就熟了

  5. 尼玛,一冲动买个了directspace的vps,结果发现自己根本就不会用,傻眼了...

    1. MOD回复

      @CrazyM: :o 所以说冲动是魔鬼。。。你没先了解vps?

    2. @kn007: 折腾一个下午了,学着用putty,然后搞了lnmp一键安装包,然后又绑域名,搭建wordpress,终于把测试站点给搭起来了。头都大了,不过也总算是入了个门。七七,求教啊

    3. MOD回复

      @CrazyM: 额,我现在是手机,在外面呢。。 你有没有入三亩地的群啊?我们大伙都在,你可以寻求帮助 :roll:

    4. @kn007: 哦哦,加了群,回头有时间多交流啊 ;-)

    5. MOD回复

      @CrazyM: 好 :grin:

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif