更换根卷之后,AWS EC2机器非常慢

我有一台生产机器(c4.2xlarge),工作正常。 但是,当我做到以下几点:

  1. 在机器运行时拍摄根卷的快照(我知道,build议不要这样做,但这对我来说工作正常)
  2. 从快照创build一个卷
  3. 将新创build的卷作为根设备(/ dev / sda1)连接到预生产机器(c4.xlarge)
  4. 启动预生产机器

新开始的机器初始响应非常缓慢 。 当我继续在机器上工作时,速度开始改善,直到几个小时后,它的响应性与我更换根音量之前一样。

为什么发生这种情况?

直观地看,这似乎是一个caching问题,就好像机器需要“预热”,然后才能按预期执行。 但是这对我来说并没有什么意义,因为我所做的只是取代机器的根音量。

EBS快照存储在S3上。 当您从快照创build新的EBS卷时,数据将从S3传输到EBS,因为这些块是必需的。 我怀疑这也可能会降低整体数量,但这可能需要一些时间,这就是为什么它优先考虑你现在需要的块。

要解决此问题,请预先调整音量。 完整的程序在这里 ,但我会概述这篇文章的要点

  1. 使用lsblk命令列出实例上的块设备。 find新的设备(在这里以粗体显示)

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT **xvdf** 202:80 0 30G 0 disk xvda1 202:1 0 8G 0 disk / 
  1. 使用dd或fio实用程序来读取设备上的所有块。

 [ec2-user ~]$ sudo dd if=/dev/**xvdf** of=/dev/null bs=1M 

请注意,新的EBS卷不需要预热,因为S3上没有任何内容。

注意:需要无关的点才能使格式正常工作。

这可能是由于RAM中的磁盘内容的高速caching。 当你的服务器运行时,文件系统中的东西被caching在RAM中,允许以RAM的速度检索这些块,而不是等待块从磁盘读取。

当你启动一个新的服务器时,没有任何东西在启动时被caching,但是当应用加载时,caching被填充,从而提高了性能。