Я на Mac Mini с OS X 10.8.2. Я разработчик приложений, но в этом случае я создаю приложение на C++, поэтому я не могу использовать Xcode для этого вопроса. Я хотел бы отследить, сколько памяти использует мое приложение, но я не хочу записывать его вручную. Как мне это сделать.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я хочу записывать это весь день. Приложение будет работать весь день, чтобы я мог сравнивать пики в памяти. Я не против сторонних приложений, если они надежны. Благодарю.

1 ответ1

3

Вы должны быть в состоянии сделать это, используя стандартную команду ps . От man ps:

%mem        %MEM      ratio of the process's resident set size  to the physical
                      memory on the machine, expressed as a percentage.  

rss         RSS       resident set size, the non-swapped physical memory that 
                      a task has used (inkiloBytes). 

vsz         VSZ       virtual memory size of the process in KiB (1024byte units).
                      Device mappings are currently excluded; this is subject
                      to change. 

Единственное, что вам нужно, это PID вашего процесса. Итак, если ваше приложение называется myApp, вы можете получить PID следующим образом:

ps x | grep myApp

Который печатает список как это:

15909 pts/3    S      0:37 myApp
22583 pts/6    S+     0:00 grep --color myApp

Первый столбец - это идентификатор процесса (PID). Теперь, если вы хотите автоматизировать это, вам нужно пропустить строку, содержащую команду grep, и сохранить вывод в переменной BASH:

pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}')

Часть awk заставляет команду печатать только 1-е поле, PID.


Вы можете собрать все это в один слой, который каждую минуту будет экономить использование памяти вашего приложения, в файл с именем memlog.txt:

while sleep 60; do \
    pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
    ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt ; \
done 
  • while sleep 60 заставляет bash работать в бесконечном цикле, ожидая 60 сек между циклами
  • sleep 60 говорит ему ждать 60 секунд. Измените это значение, если оно требуется для более частого обновления.

В результате получается файл (memlog.txt) с четырьмя столбцами: PID вашего приложения, размер резидентного набора, размер виртуальной памяти и процент памяти. Например:

4166 25240 633028  0.3
4166 25240 633028  0.3
4166 25240 633028  0.3

Это может быть легко расширено, чтобы включить использование процессора и время для каждого измерения. Например, чтобы включить время:

while sleep 60; do \
    date=$(date +%D" "%H:%M:%S);
    echo -n "$date : " >> memlog.txt;
    pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
    ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; \
done 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .