후 나는 AWS SDK에 비교적 새로운 해요S3 클라이언트 연결 누출 예외
내가 S3에서 파일을 얻기 위해 노력하고 있지만, 그 파일이 존재하지 않을 수도 있고 분명히하여 해당 확인하는 쉬운 방법이있다 아마존 S3 클라이언트, 어쨌든 그 개체를 얻으려고하고 예외 처리 내부에서 message.equals ("noSuchKey") 오류를 확인합니다. (나는 이러한 흐름을 제어하기 위해 예외를 사용하는 것이 가장 좋은 방법은 아니지만 더 좋은 방법을 찾을 수는 없다는 것을 알고있다.)
그러나 HTTP 풀링 클라이언트가 리소스를 유출하게하고 문제를 해결할 수 없다. 그것. 정말 it..nor 내가 입력의 스트림을 닫을 수 있습니다 닫을 수 있도록
AWSCredentials myCredentials = new BasicAWSCredentials(myAccessKeyID, mySecretKey);
AmazonS3 s3Client = new AmazonS3Client(myCredentials)
S3Object object = null;
GetObjectRequest req = new GetObjectRequest(bucketName, fileName);
try{
object = s3Client.getObject(req);
//the following line is not reached because of the exception
InputStream objectData = object.getObjectContent();
//do something
//close everything
} catch(AmazonServiceException e){
if(e.getErrorCode().equals("NoSuchKey")){
//do something
//here the 'object' is null, I don't have a reference to call close -> resource leak
}
else{
DebugLog.d(e);
}
} catch(IOException e){
DebugLog.d(e);
}
객체가 null이된다 캐치 절 내부 :
여기에 코드입니다. 로그는 저를 제공합니다
423835 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager - Closing connections idle longer than 60 SECONDS
483835 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager - Closing connections idle longer than 60 SECONDS
repeat..........
내가 여러 번이 메서드를 호출하고 캐치 절을 입력 할 경우, '서버는 새로운 PoolingClientConnectionManager가 초기화 될 때마다 것을 명확한 표시가되는 매우 느려집니다,하지만 난 그냥 수 그것을 닫는 방법을 찾지 못했습니다.
어떻게 닫을 수 있습니까? 아니면 처음부터 예외 처리를 사용하지 않도록 할 수 있습니까?