Есть ли инструмент, который будет запускать командную строку и сообщать о пиковом общем объеме использования ОЗУ?
Я представляю себе нечто аналогичное / usr / bin / time
linux
command-line
memory-management
jes5199
источник
источник
[ Редактировать : Работает в Ubuntu 14.04:
/usr/bin/time -v command
Убедитесь, что вы указали полный путь.]Похоже
/usr/bin/time
, дает вам эту информацию, если вы передаете-v
(это на Ubuntu 8.10). Смотрите, например,Maximum resident set size
ниже:источник
/bin/time -v
решает это.time -l
на MacOS, выдаст похожий вывод.(Это уже отвеченный старый вопрос .. но только для записи :)
Я был вдохновлен сценарием Янга и придумал этот маленький инструмент, названный memusg . Я просто увеличил частоту дискретизации до 0,1, чтобы справиться с очень короткими жизненными процессами. Вместо того, чтобы отслеживать отдельный процесс, я сделал так, чтобы он измерял rss сумму группы процессов. (Да, я пишу много отдельных программ, которые работают вместе). В настоящее время он работает на Mac OS X и Linux. Использование должно было быть аналогичным использованию
time
:Это только показывает пик на данный момент, но меня интересуют небольшие расширения для записи другой (грубой) статистики.
Хорошо иметь такой простой инструмент, чтобы просто посмотреть, прежде чем мы начнем серьезное профилирование.
источник
ps -o rss=
где rss - это реальный размер памяти (резидентный набор) процесса (в 1024 байтных единицах) из моей справочной страницы BSD.Valgrind один вкладыш:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Обратите внимание на использование --pages-as-heap для измерения всей памяти в процессе. Более подробная информация здесь: http://valgrind.org/docs/manual/ms-manual.html
источник
time
, Я покидаю тебя.valgrind --massif
. Вы также можете использоватьms_print
инструмент, который поставляется с ним для удобного вывода (включая графики использования ASCII с течением времени)time
хотя бы, занимая как минимум в 10 раз больше времени на подобную командуls
.В Linux:
Используйте
/usr/bin/time -v <program> <args>
и ищите « Максимальный размер резидентного набора ».(Не путать со
time
встроенной командой Bash ! Поэтому используйте полный путь ,/usr/bin/time
)Например:
На BSD, MacOS:
Используйте
/usr/bin/time -l <program> <args>
, ища « максимальный размер резидентного набора »:источник
sudo apt-get install time
Возможно (GNU) время (1) уже делает то, что вы хотите. Например:
Но другие инструменты профилирования могут дать более точные результаты в зависимости от того, что вы ищете.
источник
time
встроенная команда при использованииcsh
. Если вы используете точный путь, это позволит вам выполнить внешнюю команду. Насколько я знаю, только версия GNU поддерживает опцию формата./ usr / bin / time, возможно, делает то, что вы хотите, на самом деле. Что-то вроде.
Смотрите время (1) для деталей ...
источник
На MacOS Sierra используйте:
Вы можете использовать,
grep
чтобы взять то, что вы хотите, может быть.источник
command time -l
вместо/usr/bin/time -l
которого, заставит вашу оболочку фактически вызывать двоичный файл, вызываемыйtime
вместо встроенной функции. (Да,command
не заполнитель,command time
отличается от простоtime
.)Если процесс выполняется в течение как минимум пары секунд, вы можете использовать следующий скрипт bash, который запустит заданную командную строку, а затем напечатает для stderr пикового RSS (замените
rss
любой другой интересующий вас атрибут). Это несколько легкий, и он работает для меня сps
включенным в Ubuntu 9.04 (что я не могу сказатьtime
).источник
источник
Что ж, если вы действительно хотите показать пик памяти и более подробную статистику, я рекомендую использовать такой профилировщик, как valgrind . Хороший интерфейс Valgrind - это Alleyoop .
источник
Вы можете использовать такой инструмент, как Valgrind, чтобы сделать это.
источник
Вот (на основе других ответов) очень простой скрипт, который отслеживает уже запущенный процесс. Вы просто запускаете его с pid процесса, который хотите видеть в качестве аргумента:
Пример использования:
источник
Используйте Massif: http://valgrind.org/docs/manual/ms-manual.html
источник
Heaptrack - это инструмент KDE с графическим интерфейсом и текстовым интерфейсом. Я нахожу более подходящим, чем valgrind, понять использование памяти процессом, поскольку он предоставляет больше деталей и флеймграфов. Это также быстрее, потому что он меньше проверяет этот valgrind. И это дает вам пиковое использование памяти.
В любом случае, отслеживание rss и vss вводит в заблуждение, потому что страницы могут быть общими, вот почему
memusg
. Что вы действительно должны сделать, это отслеживать суммуPss
в/proc/[pid]/smaps
или использованияpmap
. Системный монитор GNOME раньше делал это, но это было слишком дорого.источник
Переизобретая колесо, с помощью скрипта bash, сделанного вручную. Быстро и чисто.
Мой пример использования: я хотел отслеживать машину linux, у которой меньше оперативной памяти, и хотел сделать снимок использования каждого контейнера, когда он работает в условиях интенсивной работы.
Пример вывода:
источник
В macOS вы можете использовать DTrace. Приложение "Инструменты" - хороший графический интерфейс для этого, оно поставляется с XCode afaik.
источник
'htop' - лучшая команда для определения того, какой процесс использует сколько оперативной памяти .....
для получения более подробной информации http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
источник
Извините, я здесь впервые и могу только задавать вопросы ...
Используется предложено:
тогда:
это очень отличается от того, что
top
показывает команда в аналогичный момент:Какие единицы измерения от Valgrind?
/usr/bin/time -v ./test.sh
Никогда не ответили - вы должны непосредственно кормить исполняемый/usr/bin/time
как:источник