Я боюсь, что нет никаких хороших независимых от платформы способов сделать, это кроме соединения с другим компьютером и наличия его отправляет Вам Ваш IP-адрес. Например: findmyipaddress. Обратите внимание, что это не будет работать при необходимости в IP-адресе, это находится позади NAT, если компьютер, с которым Вы соединяетесь, не находится позади NAT также.
Вот одно решение, которое работает в Linux: связали IP-адрес с сетевым интерфейсом .
You could use a munin-node plugin to do this, but it's a little heavyweight. http://munin.projects.linpro.no/
Actually, what I said before:
"""
try
/usr/bin/time -v yourcommand
that should help. if you use only "time", bash will execute the built-in (that does not have "-v")
"""
does not work (returns 0).
I made the following perl script (that I called smaps):
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my $max = 0;
while( open my $f, '<', "/proc/$ARGV[0]/smaps" ) {
local $/; $_ = <$f>;
$max = $1 if /Rss:\s*(\d+)/ and $1 > $max;
open my $g, '>', '/tmp/max';
say $g $max
}
And then I call it (for instance, to watch qgit's memory usage):
bash -c './smaps $$ & exec qgit'
Use single quotes so the "daughter" shell interprets $$
(that will be the same PID of qgit after the exec
). this answer, I tested :-D
HTH
Просто используйте top -n для итерации определенное количество раз и -d для задержки между обновлениями. Кроме того, вы можете получить только выходные данные, относящиеся к вашему процессу, путем поиска его pid, например:
top -n 30 -d 60 | grep <process-id>
Прочтите верхнюю страницу руководства для получения дополнительной информации
man top
Конечно, вы также можете получить нужный столбец с помощью awk.
/ proc / pid / smaps, например / proc / pid / maps дает информацию только о сопоставлениях виртуальной памяти, но не о фактическом использовании физической памяти. top и ps дают RSS, который (в зависимости от того, что вы хотите знать) может не быть хорошим индикатором использования памяти.
Хорошая ставка, если вы используете ядро Linux более поздней версии, чем 2.6.28.7, - это использовать функцию Pagemap. Это обсуждение и источник некоторых инструментов на www.eqware. net / Статьи / CapturingProcessMemoryUsageUnderLinux .
Средство сбора страниц предназначено для сбора данных об использовании памяти ВСЕМИ процессами, и поэтому, вероятно, создает большую нагрузку на ЦП, чем вы хотите. Однако вы легко сможете изменить его, чтобы он собирал данные только для определенного идентификатора процесса. Это достаточно снизило бы накладные расходы, чтобы вы могли легко запускать его каждые несколько секунд. Я не пробовал, но думаю, что инструмент анализа страниц должен работать без изменений.
EQvan
Это достаточно снизило бы накладные расходы, чтобы вы могли легко запускать его каждые несколько секунд. Я не пробовал, но думаю, что инструмент анализа страниц должен работать без изменений.EQvan
Это достаточно снизило бы накладные расходы, чтобы вы могли легко запускать его каждые несколько секунд. Я не пробовал, но думаю, что инструмент анализа страниц должен работать без изменений.EQvan
Valgrind с массивом не должен быть слишком тяжелым, но я бы рекомендовал использовать / proc. Вы можете легко написать свой собственный сценарий монитора. Вот мой, для вашего удобства:
#!/bin/bash
ppid=$$
maxmem=0
$@ &
pid=`pgrep -P ${ppid} -n -f $1` # $! may work here but not later
while [[ ${pid} -ne "" ]]; do
#mem=`ps v | grep "^[ ]*${pid}" | awk '{print $8}'`
#the previous does not work with MPI
mem=`cat /proc/${pid}/status | grep VmRSS | awk '{print $2}'`
if [[ ${mem} -gt ${maxmem} ]]; then
maxmem=${mem}
fi
sleep 1
savedpid=${pid}
pid=`pgrep -P ${ppid} -n -f $1`
done
wait ${savedpid} # don't wait, job is finished
exitstatus=$? # catch the exit status of wait, the same of $@
echo -e "Memory usage for $@ is: ${maxmem} KB. Exit status: ${exitstatus}\n"
] Это зависит от того, какой тип памяти вы хотите контролировать. [
] [] Мониторинг следующего M.a.p.d. путем сортировки номеров всех процессов (не всех потоков) позволит контролировать физическую память malloc, используемую каждым процессом.[
]. [] Вы можете написать программу на Си, чтобы сделать ее еще быстрее, но я думал, что awk - это минимальный выбор для этой цели. [
] [] Я бы предпочел получить следующие числа, чтобы получить реальные числа с наименьшими накладными расходами. [
]
Вы должны суммировать их, чтобы разделить то, что ps показывает как RSS, и получить более точные цифры, чтобы не запутать. [
] M.a.p.d: [
] [ awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Dirty/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
]
[]M.a.p.c:[
] [ awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Clean/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
]
[] M.n.p.d.:... и так далее [
]Вместо того, чтобы опрашивать / proc миллиард раз в секунду, почему бы просто не обработать вывод strace?
http://tstarling.com/blog/2010/06/measuring-memory-usage-with-strace/