【问题标题】:AmazonEc2InstanceDataPropertySource.getProperty() is extremely slow when run outside of AmazonAmazonEc2InstanceDataPropertySource.getProperty() 在 Amazon 外部运行时非常慢
【发布时间】:2015-08-31 01:30:28
【问题描述】:

我正在编写一个使用 Spring Cloud AWS 的 Spring Boot 应用程序。当我开始包含 Spring Cloud AWS bean 时,我注意到 Spring 应用程序上下文的加载速度大大减慢。以前,上下文会在几秒钟内开始,但现在大约需要 3 到 5 分钟!

我已经追踪到 AmazonEc2InstanceDataPropertySource 中的 getProperty() 方法的减速之一。这多次尝试访问链接本地 IP 地址 (169.254.169.254),当在 Amazon 网络中运行应用程序时可以访问该地址,但不能从外部访问。似乎在亚马逊网络之外运行时,代码只是等待所有连接尝试失败,我猜这是在套接字最终超时时发生的?

我的第一个想法是这个超时可能是可配置的,或者我可以配置一个配置文件以确保在本地运行时不会发生这种情况,但我在文档 (http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html) 中找不到任何内容完全没有提到这一点。

感谢这里的任何智慧,谢谢!

【问题讨论】:

    标签: amazon-web-services timeout spring-cloud spring-cloud-aws


    【解决方案1】:

    查看类似问题https://github.com/aws/aws-sdk-java/issues/450

    我意识到,对于我的本地环境(Windows 7),唯一的方法是在链接本地地址 169.254.169.254 上定义防火墙(快速失败)。 还没有找到为什么我的 windows7 与具有相同应用程序的 Mac/win8 的行为不同(如此缓慢)的具体原因。

    无论如何,在使用本地开发环境(EC2 外部)时,我还没有找到任何全局标志来禁用与 ec2-instance-metadata 的通信。

    cloud.aws.stack.auto=false 有点帮助,但还不够,所以我设置了防火墙

    【讨论】:

      【解决方案2】:

      该问题已在 spring-cloud-aws 2.3 中修复,默认情况下已禁用。 如果您仍在使用旧版本,有一个解决方法 - 您应该明确排除 org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration

      例如在 application.yml 中:

      spring.autoconfigure.exclude=org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration
      

      【讨论】:

        猜你喜欢
        • 2011-10-12
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多