首页 > 解决方案 > 为什么带有 COS 映像的 GCE VM 速度更快?

问题描述

我有两个 GCE 实例:一个带有在容器中运行 CentOS 7 的 COS 映像。让我们称之为VM1。另一个直接在其上带有 CentOS 7 映像。让我们称之为VM2。它们都运行相同的 PHP 应用程序(Laravel)。

VM1
 Image: COS container with CentOS 7
 Type: n1-standard-1 (1 vCPUj, 3,75 GB)
 Disk: persistent disk 10 GB

VM2
 Image: CentOS 7
 Type: n1-standard-1 (2 vCPUj, 3,75 GB)
 Disk: persistent disk 20 GB

如您所见,VM2其规格比VM1. 所以它应该表现更好,对吧?

也就是说,当我请求特定端点时,VM1响应时间约为 1.6 秒,而VM2响应时间约为 10 秒。它慢了大约 10 倍。端点在两个 VM 上执行完全相同的操作,它在 GCP SQL 实例上查询数据库,并返回结果。没什么异常。

因此,它几乎是相同的硬件、相同的客户操作系统和相同的应用程序。唯一的区别是VM1通过 Docker 运行应用程序。

我搜索并尝试调试很多东西,但不知道发生了什么。也许我误解了什么。

我最好的猜测是 COS 图像有一些优化,可以使应用程序执行得更快。但我不知道具体是什么。首先,我认为这可能是一些磁盘 IO 问题。但是磁盘利用率还可以VM2。然后我认为这可能是一些操作系统配置,然后我比较了两个虚拟机的 sysctl 设置,也有很多差异。但我不确定优化的关键是什么。

我的问题是:为什么会有这种差异?我可以改变什么来使VM2速度更快VM1

标签: google-compute-engine

解决方案


首先,Container-Optimized OS是基于开源的 Chromium OS,它不是 CentOS,基本上是另一个 Linux 发行版。

话虽如此,您需要了解该操作系统已针对运行 Docker 容器进行了优化。

这意味着容器优化操作系统实例预装了 Docker 运行时和 cloud-init,基本上这就是该操作系统所包含的全部内容,因为它是一个简约的容器优化操作系统。

因此,这个操作系统不会浪费 CentOS 拥有的所有可能消耗额外资源的应用程序、库和软件包的资源。

我在自己的项目中安装了这两个操作系统来检查每个操作系统的磁盘使用情况,谷歌的 Container-Optimized OS 仅使用 740MB,而 CentOS 则消耗 2.1GB。

$ hostnamectl | grep Operating
Operating System: Container-Optimized OS from Google

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.2G  740M  482M  61% /
$ hostnamectl | grep Operating
Operating System: CentOS Linux 7 (Core)

$ df -h
/dev/sda2        20G  2.1G   18G  11% /

我无法在 CentOS 中使用小型永久性磁盘,最小为 20 GB。

另一方面,容器让您的应用程序在对主机虚拟机 (VM) 的依赖较少的情况下运行,并独立于您部署到同一 VM 实例的其他容器化应用程序运行并优化使用的资源。


推荐阅读