Azure 乞丐版 B1ls 的正确食用姿势 —— 压榨极致性能

最近与几个大佬闲聊之际,发现很多人都在不约而同地吐槽 Azure 的效能。综合的来的意见不外乎是云盘 I/O 过慢(HDD/SDD 一样卡)、主机响应迟钝没反应、运行更新耗时大半天,期间 CPU 效能满载或时处于半宕机状态等等糟心体验,还贵。贵,是毋庸置疑的,毕竟产品品牌定位就是高端货,不可能做到灵车的价格。但我想说的是很多时候产品本身并无问题,只是食用姿势不对。

说说最常用到的乞丐版 B1ls —— 就是每月不到5美元但不包流量的突发性实例。我们先来看看该实例的配置:

SizevCPURAMBase CPU perfMax CPU perfCr/hrMax creditsMax cached IOPS/MbpsMax uncached IOPS/Mbps
Standard B1ls10.5GiB5%100%372200/10160/10

从上面的列表我们可以得出以下重点:

  • 系统的读写 IOPS 性能被限速在 10Mbps(相当于1.25MB/s,你的U盘可能还比它快几十倍),所以论你用 HDD 或 SSD 云盘,使用体验不会有太大差别;
  • CPU 的基准效能为 5%,CPU 积分 72 封顶。这个我们可以理解为:主机在完全闲置的状态下,每秒可以获得 0.05 个 CPU 积分,而从 CPU 积分从 0 累计到 72 的过程最快需要 24 小时;
  • 72 个 CPU 积分可以让主机以 100% 效能连续运行 72 分钟(一天的 5%),或是以 50% 效能运行 144 分钟,如此类推。

这就很好理解了对吧?B1ls 和突发实例就那么回事。说穿了,Azure 的 B 系列就是对标 AWS 的 T3/T3a/T2 系列或阿里云的 t5/t6 突发实例。

为什么会卡?

除非你挖矿或不停循环测速,否则在正常的个人使用场景下并不会持续跑满 100% CPU。即是说 B1ls 其实还是具有很大的可玩性。而且最起码还有 5% 的保底效能,不至于完全没反应的。持续哈慢卡顿的原因是因为 Azure 给你挖了两个坑:waagentswap

WALinuxAgent (waagent)

Azure 的云系统镜像都预载了Azure Linux 代理 waagent (在Ubuntu 系统下名为 WALinuxAgent),该代理的主要功能是促成虚拟机与 Azure 结构控制器之间的交互,以提供虚拟机的配置服务(比如部署 SSH 公钥和设置主机名)和基本的诊断服务。由于代理与结构控制器的信息流通是实时的,在配置不高的乞丐版主机使用时会出现占用 CPU 资源高达 50% 的情况。在之前的文章里我有提过 waagent 的卸载方法

Swap 交换空间

Azure 一向都是面向高端用户,在内存充足的情况下,交换空间可有可无,设置不对时还会导致系统减速。但对只有 372M 可用内存的乞丐版主机来说,Swap 的设置尤其重要。在运行 sudo apt upgrade 时的卡顿就是因为内存吃紧而导致的。如何设置 Swap 交换空间的方法可以参考这篇文章

其他优化设定

Ubuntu Linux 的预设的最低系统内存为 64M,这对于乞丐版主机来说有点奢侈啊。我们可以透过在 /etc/sysctl.conf 内加入以下代码来把内存最低值改为 18.6M,即可用内存的 5%:

vm.min_free_kbytes = 18600

基于云盘 10Mbps 的感人 IOPS,我们也可以顺便把系统设定为非必要时不要使用交换空间(100 = 优先使用交换空间,0 = 非必要时绝不使用交换空间):

vm.swappiness = 5

改好了存档后执行 sysctl -p 便可马上应用新的设定。

以上是我个人采用对 Azure 乞丐版 B1ls 的食用姿势,供参考。另外顺带一提,这是我第一篇以中文书写的技术文,欢迎留言和转载。


Comments

Leave a Reply