提醒:本文最后更新于 2881 天前,文中所描述的信息可能已发生改变,请仔细核实。
其实我也不懂合理化管理,只是有些想法而已。
首先,祝大家国庆快乐。是这样的,换了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交互区》
都是用的简单的命令,操作swap的不懂
@tennfy: 我只是想自动化合理化控制
都是技术文章。哎
@鬼娃娃: 额
我想说这都是些什么。。。
@咚门: 没什么,。,,
技术文章,单身我却不懂,只能路过看看。
@海涛: 那就看看呗,看着看着就熟了
尼玛,一冲动买个了directspace的vps,结果发现自己根本就不会用,傻眼了...
@CrazyM: 所以说冲动是魔鬼。。。你没先了解vps?
@kn007: 折腾一个下午了,学着用putty,然后搞了lnmp一键安装包,然后又绑域名,搭建wordpress,终于把测试站点给搭起来了。头都大了,不过也总算是入了个门。七七,求教啊
@CrazyM: 额,我现在是手机,在外面呢。。 你有没有入三亩地的群啊?我们大伙都在,你可以寻求帮助
@kn007: 哦哦,加了群,回头有时间多交流啊
@CrazyM: 好