Инструменты для мониторинга оперативной памяти заняты
Я написал приложение, которое нужно сравнить с другим, которое выполняет ту же работу. Мое в OCaml, а другое в Java.
Я хотел бы сделать два запуска программ и контролировать использование оперативной памяти в течение времени, прошедшего после выполнения этих программ. Обе программы действительно занимают много памяти и процессоров, поэтому у меня будет достаточно данных для их сравнения, но я не знаю как.
Я знаю, что не так много смысла тестировать приложения, написанные на разных языках, но есть ли инструмент, который просто отслеживает использование памяти программой во время, может быть, предоставляя в качестве результата набор данных или график?
РЕДАКТИРОВАТЬ: идеальная операционная система Mac OS X или просто Unix
4 ответа
Я использую решение, сопоставимое с игреком. Он достаточно универсален с точки зрения языка реализации, если вы используете Unix. Небольшая проблема в том, что команды top
а также ps
и то, и другое можно использовать для этой цели, они работают по-разному в BSD Unix (из которой происходит Mac OS X) и Linux. Я думаю, что его командная строка для Linux.
Для Mac OS X я использовал:
top -s 10 -l 10000 | grep <PID or process name>
и для Linux:
top -d 10 -n 10000 | grep <PID or process name>
10 - это период выборки в секундах.
Если вы хотите получить информацию от GC OCaml, вы можете использовать модуль GC OCaml, но это не сравнимо напрямую с поведением Java-программы.
Отредактировано, чтобы добавить: там, где задействован GC, существует компромисс между объемом памяти и временем процессора. ГХ может работать усерднее, чтобы сделать мертвые блоки доступными быстрее и, таким образом, снизить потребление памяти. Если вы обнаружите, что это затрудняет сравнение двух ваших программ, вы можете настроить GC OCaml так, чтобы он использовал тот же компромисс, что и Java GC. Это задокументировано в модуле GC. Я ожидаю, что Java также позволяет настраивать этот параметр.
while : ; do ps --no-header -o %cpu,vsz,rss -p PID; sleep 1 ; done
Вы можете отслеживать использование Java с помощью /usr/bin/jvisualvm
Программа Activity Monitor может дать вам приблизительную оценку использования ресурсов любой обычной Unix-программой.
Инструмент Массива Valgrind может сделать это для нативного кода.