У меня есть несколько программ, которые я выполняю в сценарии оболочки:
./myprogram1
./myprogram2
...
Я знаю, что могу профилировать каждую отдельную программу, редактируя исходный код, но я хотел знать, есть ли способ измерить общее время, выполненное путем профилирования самого скрипта. Есть ли программа таймера, которую я могу использовать для этой цели? Если да, то насколько точны его измерения?
shell-script
time
profiling
Павел
источник
источник
Ответы:
Начните с использования времени согласно предложению Джона Линя:
Вы не говорите, на каком Unix работают ваши скрипты, но следите за linux, связкой на Solaris / AIX, и я думаю, что tusc на hp-ux позволит вам многое узнать о том, что делает процесс. Мне нравится опция strace -c, чтобы получить хорошее резюме:
Также обратите внимание, что подключение этих программ типа трассировки может несколько замедлить работу программы.
источник
Проверьте
time
команду . Вы можете использовать его, чтобы измерить время, необходимое для выполнения, а также некоторую другую полезную информацию, например, о том, где время тратится.источник
Это не совсем профилирование, но вы можете отследить ваш скрипт во время его работы. Поставьте
set -xv
перед разделом, который вы хотите отслеживать, иset +xv
после раздела.set -x
включает xtrace, который покажет каждую строку, которая выполняется.set -v
включает подробный режим, который также показывает строки, которые могут оказывать влияние, но не выполняются, например, назначение переменных.Вы также можете поставить метку времени. Вы нуждаетесь в эмуляторе терминала, который может пометить время каждой строкой Единственный, кого я знаю, это RealTerm , программа для Windows, но она будет работать с Wine. Вы также можете использовать
grabserial
, хотя я не пробовал, кроме как с реальными последовательными портами. Вы можете узнать, какое последовательное устройство использует ваша оболочка, запустивps -p $$
(если это не так, используйте,man
чтобы узнать, как включить столбец TTY в вашps
вывод).Также см. Инструменты профилирования производительности для сценариев оболочки в Stack Overflow.
источник
time
за несколько итерацийПрофилирование, выполнив одну и ту же команду несколько раз
Где
echo "scale=1000; 4*a(1)" | bc -l
вычисляет число pi иtime (...)
гарантирует, чтоfor
цикл выполняется как одна команда.источник
Поскольку я оказался здесь хотя бы дважды, я реализовал решение:
https://github.com/walles/shellprof
Он запускает ваш сценарий, прозрачно синхронизирует все напечатанные строки и в конце выводит список из 10 лучших строк, которые были на экране самыми длинными:
источник