当前位置: 首页 > 面试题库 >

Amazon S3是否有连接池?

柴衡
2023-03-14
问题内容

我曾经用过代码

public static AmazonS3Client s3 = null;
...
BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
s3 =  new AmazonS3Client(c);

仅创建一个实例s3,而数十个线程将通过s3.putObject()上传图像。在转储信息中,我可以看到一个线程将锁定唯一的实例s3,而其他线程则在等待。

因此,我认为如果使用以下代码,可能会更快:

BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
for(int i = 0; i < 10; i++)
    amazonS3[i] = new AmazonS3Client(c);

每次系统获得一个随机的s3实例,然后上传图像。

private static AmazonS3 getS3(){
    int i = (int)(Math.random() * 10); 
    return amazonS3[i];
}

但似乎系统速度变慢。为什么会这样?也许唯一的实例s3已经使用了连接池?我很困惑。


问题答案:

适用于Java的AWS开发工具包中的每个客户端(包括Amazon
S3客户端)当前都维护其自己的HTTP连接池。您可以通过ClientConfiguration类调整HTTP连接池的最大大小,该类可以传递到客户端对象构造函数中。

我们建议共享客户端对象,因为过多的HTTP连接池无法有效利用这些开销和开销。当您像这样跨线程共享客户端对象时,应该会看到更好的性能



 类似资料:
  • 问题内容: 我用Java编写了一个简短的测试代码,以上传内存中生成的PDF文件。在此测试代码中,我仅使用一个虚拟字节数组,但在实际使用中,我将在该字节数组中放置生成的PDF(最多2-3页)。一切正常:上传文件并设置权限。 但是,由于返回了PutObjectResult,所以我想知道应该如何检查它。还是足以找到AmazonClientException和AmazonServiceException异

  • 考虑以下连接列表: 在一分钟内经过一段短时间后: 在我写完这个stackoverflow后: 语境: 这是一些第三供应商应用程序打开连接(源代码对我们不可用,所以我们不知道详细信息)。我们知道他们的连接管理很糟糕,他们也知道这一点。这是可怕的,因为你们可以在第一个表90850182中看到连接泄漏。如果其他人重置了他们的计时器,那么这个计时器开始无限期地老化。在旧版本的应用程序中,它将永远存在。在较

  • 问题内容: 如何检查连接是否已在事务中?我正在使用Microsoft SQL Server数据库文件。 问题答案: 经过一番搜索,我发现了另一个“堆栈溢出”问题。事实证明,您不能在ADO.NET中嵌套事务。尝试时,您可能最终会启动两个不相关的事务,这会导致并行事务错误。 要查看连接当前是否在事务中,可以执行以下操作: 这将返回嵌套事务的数量。 请注意,您可以手动嵌套事务,而无需使用SqlTrans

  • 问题内容: 如何使用Javascript检查互联网连接?这样,我可以有一些条件说“在生产过程中使用Google缓存的JQuery版本,在开发过程中使用该版本或本地版本,具体取决于Internet连接”。 问题答案: 针对您的特定情况的最佳选择可能是: 在您的结束标记之前: 鉴于您的问题集中在jQuery上,这可能是最简单的方法。 如果您想要一个更强大的解决方案,可以尝试: 阅读有关W3C在脱机We

  • 我有一个使用SpringLDAP 1.3.1的应用程序。它在启动时在Spring上下文中创建LdapTemplate,并将其传递给我的应用程序。我连接的LDAP字符串实际上是一个VIP设备,后面有多个Active Directory服务器。 该应用程序用于创建组层次结构,并分几个步骤进行。首先,它创建任何新组,然后删除任何删除的组,然后更新和更改组,最后更新任何新组或移动组的父级。 在最后一步中,