EBS上超高频率的IO写入

这几天注意到我的EC2机器上有非常大量的IO,导致AWS的总体开销增加了很多。比如9月份的帐单中:

I/O requests     120,076,984 IOs     费用$14.41

30天有超过1亿次IO,也就是每秒钟有40几次IO,这个频率也高了一点吧……

于是尝试了以下优化的方法:

  • 把mod_pagespeed的缓存移到/dev/shm中。缓存嘛,无所谓的。
  • 把apached的日志文件也移到了/dev/shm中,反正我也不经常看log。

然后发现IO次数没有明显下降。后来开了iotop监测进程的io,也没有发现明显的异样。

再后来实在没办法的时候,随便尝试了一个优化,把/tmp做成tmpfs,就是在/etc/fstab中添加一行:

然后IO就神奇地降下来了…下图是36小时内EBS的VolumeWriteOps数据,可以看出,把/tmp做成tmpfs后,WriteOps的数量明显下降:

虽然还不知道到底是哪个进程在频繁写入/tmp,不过钱已经省下来了,还算蛮开心的……

Windows还是Linux

先交待一下背景,大学期间,除了课程需要和比赛之外,我基本没有用过Linux。对Linux可以算是一点都不了解。狗屎运的是,毕业后第一家公司对Linux也没什么好感,第二家公司是做广告的,对Linux知识要求也不高。于是就这么稀里糊涂地混了好几年。所以以下言论你可以认为是一面之辞。

言归正传,在大学里需要学习Linux吗?或者再深入一点,需要用Linux来替代Windows吗?

简单来说,完全没必要。除非你打定了主意以后开发Linux软件,或者从事Linux相关行业(我也不知道有没有这类的行业),那可以从大学的时候就开始准备起来。如果你还不确认以后会做什么,或者根本不知道Linux和Windows有什么差异,那基本可以不用专注于Linux,因为两者没什么本质差别,而日常使用显然是Windows有优势,比如国内的网银客户端。

那么为什么似乎身边的同学都对Linux情有独钟呢?我刚进大学的时候,有个同学一脸羡慕地跟我说,"某同学可以自行编译并安装SuSE"。好吧,当年我连SuSE是什么都不知道,装个Windows也需要光盘而不是用硬盘启动那么高深的技能,就更别说“能编译一个OS”那么牛逼的举动了,要知道有一票人连"Hello World"也编译不过……不过回过头来仔细想一下,会装个系统有什么了不起,安装程序是别人写好的,那同学只是按着说明书操作一下罢了。真正牛逼的不是跟着说明书走一遍,而是发现说明书中不合理的地方,然后尝试去改进它。多数人只是止步于如何使用,而不进一步研究一下内部的状况,从何想想如何改进。

回到Windows和Linux的问题上,从操作系统的角度来说,这两者没有本质的差别。操作系统发展了这么多年,该有的大家都有,就大学期间需要掌握的程度,学Windows和学Linux的效果是一样的。只是Windows对于日常使用更方便,所以没有必要在艰难困苦中自欺欺人,大学生活有很多更有意义的事情等着你。

SSH 到 EC2 主机的时候碰到"Connection Refused"错误

昨天早上手贱重启了一下 EC2 的主机(Instance),然后再次 SSH 的时候就看到以下错误:

 ssh: connect to host leonax.net port 22: Connection refused

然后 SSH 就死活连不上,包括再次重启主机也没有用。无奈只好去看了系统日志,还好 AWS 提供了这个功能,右键点击主机,然后选 Get System Log。然后看到了这一行:

Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable. [FAILED]

然后意识到刚才手贱在 /var 下面执行了 sudo chown -R apache:apache .,于是那个 sshd 就不归 root 管了。哭。

Google 了一圈发现除了 SSH 是没有其它办法连上 EC2 的主机……

无奈只好曲线救国了……

首先,创建一个新的主机,然后把老的主机的 Volume 备份一下,就是先 Create Snapshot,然后再用 Snapshot Create Volume,这样就做出一个一模一样的 Volume。这样做的原因是,老的主机的 Apache 依然可以工作,为了不让 Blog 下线,就只能让老的主机继续运行着。

然后把新的 Volume attach 到新的主机上。方法是在 EC2 的界面里 Attach Volume,然后在主机的 Console 里面 Mount 新的Volume:

然后在 /vol 下面就可以看到老主机的文件了。

我没有尝试恢复 /vol/var/ 下面每个文件的权限(因为不记得了-_-),于是只好在新的主机上重做一遍 WordPress 的部署,由于数据库不在这台机器上,所以部署起来非常简单,装一下 Apache 和 PHP 就搞定了。

然后再回到 EC2,把老的主机停掉,把 IP 地址绑定到新的主机上,就完成了无缝切换了……