Есть ли способ для программы Python определить, сколько памяти она использует в настоящее время? Я видел дискуссии об использовании памяти для одного объекта, но мне нужно общее использование памяти для процесса, чтобы я мог определить, когда необходимо начать отбрасывать кэшированные данные.
python
memory-management
rwallace
источник
источник
psutil
кросс - платформенный и может возвращать то же значение , какps
инструмент командной строки: pythonhosted.org/psutil/#psutil.Process.memory_infopsutil
) в настоящее время поддерживает Linux, Windows, OSX, FreeBSD и Sun Solaris, как 32-разрядные, так и 64-разрядные архитектуры, с версиями Python от 2,6 до 3,4" из Документацииpsutil
,psutil.Process()
эквивалентноpsutil.Process(os.getpid())
. Это еще одна вещь, которую вы должны помнить, чтобы напечатать.Для систем на основе Unix (Linux, Mac OS X, Solaris) вы можете использовать
getrusage()
функцию из стандартного библиотечного модуляresource
. Полученный объект имеет атрибутru_maxrss
, который дает пиковое использование памяти для вызывающего процесса:Документы Python не помнят единицы измерения. Обратитесь к
man getrusage.2
странице вашей конкретной системы, чтобы проверить значение единицы измерения. В Ubuntu 18.04 единица измерения указана в килобайтах. В Mac OS X это байты.getrusage()
Функция также может быть дана ,resource.RUSAGE_CHILDREN
чтобы получить использование для дочерних процессов, а также (в некоторых системах)resource.RUSAGE_BOTH
для общего (я и ребенка) использования процесса.Если вы заботитесь только о Linux, вы также можете прочитать файл
/proc/self/status
или,/proc/self/statm
как описано в других ответах на этот и этот вопросы .источник
В Windows вы можете использовать WMI ( домашняя страница , cheeseshop ):
В Linux (из кулинарной книги python http://code.activestate.com/recipes/286222/ :
источник
return int(result[0].WorkingSet)
В Unix вы можете использовать
ps
инструмент для мониторинга:где 1347 - некоторый идентификатор процесса. Также результат в МБ.
источник
Текущее использование памяти текущего процесса в Linux для Python 2 , Python 3 и pypy без импорта:
Он считывает файл состояния текущего процесса, берет все после
VmRSS:
, затем берет все до первой новой строки (изолируя значение VmRSS) и, наконец, обрезает последние 3 байта, которые являются пробелом и единицей (кБ).Чтобы вернуться, он удаляет любые пробелы и возвращает его как число.
Протестировано на Linux 4.4 и 4.9, но даже ранняя версия Linux должна работать: просматривая
man proc
и ища информацию о/proc/$PID/status
файле, она упоминает минимальные версии для некоторых полей (например, Linux 2.6.10 для «VmPTE»), но «VmRSS» Поле (которое я здесь использую) не имеет такого упоминания. Поэтому я предполагаю, что это было там с ранней версии.источник
Мне нравится это , спасибо за @bayer. У меня есть специальный инструмент для подсчета процессов.
Прикрепить мой список процессов.
Ссылка
источник
ps aux | awk '/python/{sum+=$6}; END {print sum/1024 " MB"}'
Для Python 3.6 и psutil 5.4.5 проще использовать
memory_percent()
перечисленные здесь функции .источник
Еще проще в использовании , чем
/proc/self/status
:/proc/self/statm
. Это просто список разделенных пробелами нескольких статистических данных . Я не смог сказать, присутствуют ли оба файла всегда.Вот простой пример:
Это создает список, который выглядит примерно так:
Вы можете видеть, что он увеличивается примерно на 300 000 байтов после примерно 3 распределений по 100 000 байтов.
источник
Ниже приведен мой декоратор функций, который позволяет отслеживать, сколько памяти потребляет этот процесс до вызова функции, сколько памяти он использует после вызова функции и как долго выполняется функция.
Итак, когда у вас есть какая-то функция, украшенная этим
Вы сможете увидеть этот вывод:
источник
источник
Для систем Unix команда
time
(/ usr / bin / time) выдает эту информацию, если вы передаете -v. СмотритеMaximum resident set size
ниже, который является максимальным (пиковым) реальным (не виртуальным) объемом памяти, который использовался во время выполнения программы :источник
time
вместо/usr/bin/time
. Смотрите: askubuntu.com/questions/434289/…Использование sh и os, чтобы попасть в ответ python bayer.
Ответ в мегабайтах.
источник