コードを使用したことがある
public static AmazonS3Client s3 = null;
...
BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
s3 = new AmazonS3Client(c);
s3.putObject()によって数十のスレッドが画像をアップロードする間、1つのインスタンスs3のみが作成されます。ダンプ情報では、他のスレッドが待機している間、1つのスレッドが唯一のインスタンス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はすでに接続プールを使用していますか?私は混乱しています。
AWS SDK for Javaの各クライアント(Amazon S3クライアントを含む)は現在、独自のHTTP接続プールを維持しています。クライアントオブジェクトコンストラクターに渡すことができるClientConfigurationクラスを使用して、 HTTP接続プールの最大サイズを調整できます。
効果的に利用されていないHTTP接続プールが多すぎるための費用とオーバーヘッドのため、クライアントオブジェクトを共有することをお勧めします。このようなスレッド間でクライアントオブジェクトを共有すると、パフォーマンスが向上するはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加