我正在从私人docker注册表中提取一个~3GB的图像,大约需要10分钟。
大约 80% 的时间用于提取层,因此下载/网络似乎不是瓶颈。它是在 aws 环境中执行的。两个实例(拉取实例和注册表)都在 aws 中的同一网络上。两者都是 t2.micro。
知道为什么会花这么长时间吗?当我从本地开发机器拉取相同的图像时,“提取”花费的时间不到 1 分钟!
是否存在 ebs io 性能瓶颈?拉取实例是“新鲜的”,即在拉取之前已经设置好。
答案1
您的 EBS 卷可能已耗尽 IO。另外,请检查您是否在使用 gp2 或 magnet,因为美国东部至少 1 个可用区的 magnet 非常慢。但是 gp2 也有一个信用桶,您可能会用尽它。
答案2
你的服务器负载如何,这似乎是与 IO 相关的问题,请回答这个问题以帮助进一步进行故障排除。
你的服务器的平均负载是多少?你还有没有其他与 IO 相关的大型进程在运行?
您能否分享一下您的 EBS 卷状态的屏幕截图,至少是操作状态?您可以选择有问题的卷并仔细查看状态检查报告。
您是否有 CloudWatch 指标活动服务来监控您的 ec2 实例和卷的 I/O 特性?例如 VolumeWriteOps/VolumeWriteBytes 和 VolumeReadBytes/VolumeReadOps。
您的 Docker 引擎存储驱动程序和文件系统是什么。您使用的是 aufs 还是 devicemapper?ext4 还是 btrfs 文件系统?
您还可以对实例执行一些 IO 测试,以确保一切正常运行。dd 可以是一个很好的起点。vmstat、iostat 和 iotop 等工具也可以派上用场,帮助您排除故障。