Диагностика утечки памяти в boto3 - PullRequest
0 голосов
/ 15 мая 2018

У меня есть работник из сельдерея, работающий на Elastic Beanstalk, который опрашивает очередь SQS, получает сообщения (содержащие имена файлов S3), загружает эти файлы из S3 и обрабатывает их. Мой рабочий должен запускаться каждые 15 секунд, но по какой-то причине использование памяти продолжает расти со временем.

Это код, который я использую для доступа к SQS

def get_messages_from_sqs(queue_url, queue_region="us-west-2", number_of_messages=1):
    client = boto3.client('sqs', region_name=queue_region)
    sqs_response = client.receive_message(QueueUrl=queue_url, MaxNumberOfMessages=number_of_messages)
    messages = sqs_response.get("Messages", [])
    cleaned_messages = []
    for message in messages:
        body = json.loads(message["Body"])
        data = body["Records"][0]
        data["receipt_handle"] = message["ReceiptHandle"]
        cleaned_messages.append(data)
    return cleaned_messages

def download_file_from_s3(bucket_name, filename):
    s3_client = boto3.client('s3')
    s3_client.download_file(bucket_name, filename, '/tmp/{}'.format(filename))

Нужно ли нам закрывать клиентское соединение в boto3 после того, как мы закончили с процессом? Если так, как мы можем это сделать? Memory Monitor Graph

1 Ответ

0 голосов
/ 22 августа 2018

Я столкнулся с похожими проблемами при использовании сельдерея в производстве, совершенно не связанного с Бото.Хотя у меня нет объяснения утечки памяти (для этого потребуется серьезное написание и профилирование кода), я могу предложить потенциальный обходной путь, если ваша цель - просто не исчерпать память.

Настройка Максимальное количество заданий на ребенка должно позволять вам постоянно восстанавливать память по мере ее освобождения уничтоженным процессом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...