我有两个GCE实例:一个在容器中运行COS映像的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
。然后我以为可能是某些OS配置,然后比较了两个VM的sysctl设置,并且也有很多差异。但是我不确定优化的关键是什么。
我的问题是:为什么有这种区别?我该如何改变以使其VM2
更快VM1
呢?
我没有使用GCP的经验(仅仅是Azure和AWS),但是这个问题可能与延迟有关。因此,你需要确认所有资产是否都在同一地区。
你可以尝试验证每个VM对BD做出响应的时间。有了这些信息,你将能够知道这种情况是否与延迟有关。
你杀了它!哈哈哈
VM1
和DB在同一地区,但VM2
不是。从pingVM1
到DB大约是1ms,从大约VM
是30ms。我VM2
在同一地区重新创建,现在它可以按预期运行。谢谢!