@Helpmiplis

Как ограничить ресурсы бота (ОЗУ) в discord на python?

Я хочу ограничить ресурсы моего бота в discord чтобы не зависал ноут. Например из 4гб ОЗУ использовалось только 1,5гб, так же и с процессором. Так же бот состоит из множество файлов (когах) и чтобы на них тоже действовало ограничения.
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 2
@deliro
Лимиты теоретически ограничить можно, но практически - не нужно. 1.5 гб для ботика - это овердофига (если только он не обрабатывает десятки тысяч пользователей одновременно). Особенно если он асинхронный (запущен в одном процессе). Правильно - лечить проблему, а не её симптомы. Профилируй, почему у тебя бот столько жрёт. Вероятно, где-то что-то течёт. Плюс в питоне вагон способов уменьшить нагрузку на память от элементарного __slots__ до генераторов и Сишных библиотек

Ну и как сказал mayton2019, после оптимизации, если это не спасает, нужно начинать горизонтально масштабировать нагрузку.

Тупо ограничить память - это просто шанс того, что придёт OOM Killer (или его аналог) и прибьёт твоё приложение, когда оно этого не ожидает. Да, есть инструменты, например, в golang, чтобы ограничить потребление памяти, но все они делают ровно одну вещь: управляют параметрами запуска сборщика __мусора__ (то есть, памяти, которая НЕ НУЖНА). На секундочку, протёкшая память не определяется как мусор, ровно как и не является мусором НУЖНАЯ память. Её никакие оптимизаторы не сожмут никакой магией.

Есть также техника, которая позволяет "костыльно", но быстро и иногда даже эффективно избавляться от утечек памяти, не решая саму причину утечек. Тупо перезапускать воркер после X обработанных запросов, то есть, стартовать новый процесс, перекидывать трафик на него, а старый убивать вместе со всей утёкшей памятью.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Наверное коробочное решение - это запускать все в конейнерах Docker/Kubernetes.

+На стековерлоу было такое обсуждение https://stackoverflow.com/questions/41105733/limit...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы