我有一台运行良好的生产机器(c4.2xlarge)。但是,当我执行以下操作时:
- 在机器运行时对根卷进行快照(我知道,建议不要这样做,但这对我来说很好)
- 从快照创建卷
- 将新创建的卷作为根设备 (/dev/sda1) 附加到预生产机器 (c4.xlarge)
- 启动预生产机器
新启动的机器响应非常缓慢地最初。随着我继续操作机器,速度开始提高,直到几个小时后,它的响应速度与我更换根卷之前一样快。
为什么会发生这种情况?
直观来看,这似乎是缓存问题,好像机器需要“预热”才能按预期运行。但这对我来说没有任何意义,因为我所做的只是替换机器的根卷。
答案1
EBS 快照存储在 S3 上。当您从快照创建新的 EBS 卷时,数据会根据块的要求从 S3 流式传输到 EBS。我怀疑它还可能会降低整个卷的性能,但这可能需要一些时间,这就是为什么它会优先考虑您需要的块现在。
要解决此问题,您需要预热音量。完整流程请点击这里但我将在这篇文章中概述要点
- 使用 lsblk 命令列出实例上的块设备。找到新设备(此处以粗体显示)
。
[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 /
- 使用 dd 或 fio 实用程序读取设备上的所有块。
。
[ec2-user ~]$ sudo dd if=/dev/**xvdf** of=/dev/null bs=1M
请注意,新的 EBS 卷不要需要预热,因为 S3 上没有存储任何内容。
注意:需要多余的点才能使格式正常工作。
答案2
这可能是由于磁盘内容缓存在 RAM 中。在服务器运行时,文件系统中的内容会缓存在 RAM 中,这样就可以以 RAM 速度检索这些块,而不必等待从磁盘读取块。
启动新服务器时,启动时不会缓存任何内容,但在应用负载时会填充缓存,从而提高性能。