1

Я довольно новыми для AWS SDKS3 утечка соединения клиента после исключения

Я пытаюсь получить файл с S3, но этот файл не может существовать, и, видимо, есть простой способ проверить, что с Клиент Amazon S3, поэтому я пытаюсь получить этот объект в любом случае, а внутри обработки исключений я проверяю наличие сообщения error.equals («noSuchKey»). (Я знаю, что использование исключения для контроля такого потока не является лучшей практикой, но не может найти лучшего способа)

Но тогда проблема в том, что клиент-пул http вызывает утечку ресурсов, и я не могу найти способ закрыть Это.

Вот код:

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); 
    } 

в предложении улова объект становится пустым, так что я не могу закрыть it..nor я могу закрыть любого из его входных потоков. Журнал дает мне:

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 инициализируется, но я просто не могу» t найти способ закрыть его

Любая идея о том, как я могу ее закрыть? Или как я могу избежать использования обработки исключений в первую очередь?

ответ

1

Я вижу, что у вас есть «// закрыть все», но без публикации фактического кода я не могу сказать, закрываете ли вы успешно загруженные объекты S3Object. Вы уверены, что это не то, что просачивается? Добавьте блок finally для закрытия объекта S3Object или используйте блок try-with-resouce. Кажется, что если ни один S3Object не найден и не загружен, тогда он не может течь.

 Смежные вопросы

  • Нет связанных вопросов^_^