Amazon s3 过度使用S3会导致插座关闭吗?
这个问题是关于Swisscom应用程序云的,而不是关于Amazon。 我的应用程序使用50个线程。总之,他们每秒向S3发出25-200个请求。运行10-30秒后,我开始出现如下异常:Amazon s3 过度使用S3会导致插座关闭吗?,amazon-s3,swisscomdev,Amazon S3,Swisscomdev,这个问题是关于Swisscom应用程序云的,而不是关于Amazon。 我的应用程序使用50个线程。总之,他们每秒向S3发出25-200个请求。运行10-30秒后,我开始出现如下异常: 2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT com.amazonaws.AmazonClientException: Unable to execute HTTP request: Socket is closed 2016-10-29 14:36:58 [APP/PROC/W
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT com.amazonaws.AmazonClientException: Unable to execute HTTP request: Socket is closed
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:956)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:661)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:635)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:618)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$300(AmazonHttpClient.java:586)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:573)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:445)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4041)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1581)
2016-10-29 14:36:58 [APP/PROC/WEB/0] OUT at <my_code_from_here>.putFile(S3Service.java:49)
2016-10-29 14:36:58[APP/PROC/WEB/0]OUT com.amazonaws.AmazonClientException:无法执行HTTP请求:套接字已关闭
2016-10-29 14:36:58[APP/PROC/WEB/0]发布于com.amazonaws.http.AmazonHttpClient$RequestExecutor.executehelp(AmazonHttpClient.java:956)
2016-10-29 14:36:58[APP/PROC/WEB/0]发布于com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:661)
2016-10-29 14:36:58[APP/PROC/WEB/0]发布于com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:635)
2016-10-29 14:36:58[APP/PROC/WEB/0]发布于com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:618)
2016-10-29 14:36:58[APP/PROC/WEB/0]在com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$300上发布(AmazonHttpClient.java:586)
2016-10-29 14:36:58[APP/PROC/WEB/0]在com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute上发布(AmazonHttpClient.java:573)
2016-10-29 14:36:58[APP/PROC/WEB/0]在com.amazonaws.http.AmazonHttpClient.execute上发布(AmazonHttpClient.java:445)
2016-10-29 14:36:58[APP/PROC/WEB/0]发布于com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4041)
2016-10-29 14:36:58[APP/PROC/WEB/0]发布于com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1581)
2016-10-29 14:36:58[APP/PROC/WEB/0]OUT at.putFile(S3Service.java:49)
重新启动应用程序或等待几分钟后,问题就解决了,但一旦我启动并再次加载S3,我在10-30秒后再次遇到这些异常
请求速率有任何限制吗?您为什么不自己发现云铸造提供商是否有任何类型的出站流量限制?此外,您需要排除应用程序存在某种缺陷的可能性 因此,为了发现是否存在任何出站请求限制,并排除应用程序出现某种问题的可能性,我们可以按照以下步骤进行操作:
cf push LoadTestFromCloudFoundry --no-hostname --no-route --docker-image gsmachado/loadtest-docker --health-check-type none -c 'loadtest -t 20 -c 10 --rps 10 -k https://IP_ADDRESS_TO_YOUR_EXTERNAL_WEBSERVICE:PORT'
在本例中,我们正在推送一个名为“LoadtestFromCloudFoundry”的应用程序,它没有任何主机名,没有任何路由,也没有任何健康检查类型。此外,我们正在指定一个docker映像(gsmachado/loadtest docker),该映像已经发布在DockerHub上,但是您可以检查源代码(给它一个星号!它是开源的!)。选项'-c'指定要在此docker容器中运行的命令,实际上,docker容器是在Cloud Foundry中运行的应用程序。此docker容器使用项目执行对特定web目标的请求。您可以查看所有文档,并使用自己的'-c'命令。在这个特定的示例中,我们定义,在20秒内,我们希望使用10个并发客户端每秒执行20个请求。cf push命令需要一段时间才能执行,因为CloudFoundry应该部署整个docker容器
您可以通过检查“cf日志”来检查负载测试的结果:
cf logs LoadTestFromCloudFoundry
此外,还有一个清单示例,也包含自述文档
如果问题出在您的应用程序中,或者如果Cloud Foundry提供商(在本例中为Swisscom AppCloud)真的每秒阻止了一定数量的请求(RPS),那么针对外部应用程序执行此类负载测试可能会让您有很强的洞察力
但是,现在,如果您认为云计算代工提供商以某种方式阻止了您,那么您必须联系他们的支持人员。一个像样的提供商不应该对向其服务付费的客户施加任何类型的出站RPS限制
这是我在这个问题上的2美分。:-) 没有出站流量限制或DoS保护 Swisscom AppCloud有一个针对S3(品牌为Dynstrg,供应商为EMC Atmos)访问的DoS策略,该策略可在一定级别后拦截请求。此检测标准当前由每个源IP 200 TPS(每秒事务数,TCP会话数)触发,然后此IP被阻止至少120秒
Swisscom目前正在讨论增加这些触发器。感谢您的快速响应!我很快会带着结果回来的@如果您发现您所面临的问题是由于Fyodor Glebov提到的问题,还是纯粹的应用程序问题,AndrásTornai会告诉我。不久前我遇到了一些类似的事情。啊,别忘了至少投票支持我的答案。你使用我们的S3服务(dynstrg)吗?没有出站流量限制或DoS保护,但有DoS保护t