Saya memiliki beberapa program yang saya jalankan dalam skrip shell:
./myprogram1
./myprogram2
...
Saya tahu bahwa saya dapat membuat profil setiap program dengan mengedit kode sumber, tetapi saya ingin tahu apakah ada cara saya bisa mengukur total waktu yang dieksekusi dengan membuat profil skrip itu sendiri. Apakah ada program pengatur waktu yang dapat saya gunakan untuk tujuan ini? Jika demikian, seberapa akurat pengukurannya?
shell-script
time
profiling
Paul
sumber
sumber
Jawaban:
Mulailah dengan menggunakan waktu sesuai saran Jon Lin:
Anda tidak mengatakan apa unix skrip Anda berjalan tetapi strace di linux, truss pada Solaris / AIX, dan saya pikir tusc pada hp-ux memungkinkan Anda belajar banyak tentang apa yang sedang dilakukan proses. Saya suka opsi -c strace untuk mendapatkan ringkasan yang bagus:
Perhatikan juga bahwa melampirkan program jenis penelusuran ini dapat memperlambat program.
sumber
Lihat
time
perintahnya . Anda dapat menggunakannya untuk mengukur waktu yang diperlukan untuk mengeksekusi bersama dengan beberapa info berguna lainnya seperti di mana waktu yang dihabiskan.sumber
Ini bukan profil yang tepat, tetapi Anda dapat melacak skrip saat dijalankan. Letakkan
set -xv
sebelum bagian yang ingin Anda lacak danset +xv
setelah bagian.set -x
memungkinkan xtrace, yang akan menampilkan setiap baris yang dieksekusi.set -v
mengaktifkan mode verbose, yang juga akan menampilkan baris yang mungkin memiliki efek, tetapi tidak dieksekusi, seperti penugasan variabel.Anda juga dapat cap waktu jejak Anda. Anda memerlukan emulator terminal yang dapat mencatat waktu setiap baris; satu-satunya yang saya tahu adalah RealTerm , yang merupakan program Windows, tetapi akan bekerja dengan Wine. Anda mungkin juga dapat menggunakan
grabserial
, meskipun saya belum mencobanya kecuali dengan port serial nyata. Anda dapat mengetahui perangkat serial apa yang digunakan shell Anda dengan menjalankanps -p $$
(jika tidak, gunakanman
untuk mencari tahu bagaimana memasukkan kolom TTY dalamps
output Anda ).Juga, lihat Alat profil kinerja untuk skrip shell di Stack Overflow.
sumber
time
untuk beberapa iterasiMembuat profil dengan menjalankan perintah yang sama beberapa kali
Di mana
echo "scale=1000; 4*a(1)" | bc -l
menghitung pi dantime (...)
memastikan bahwafor
loop berjalan sebagai satu perintah.sumber
Karena saya telah berakhir di sini setidaknya dua kali sekarang, saya menerapkan solusi:
https://github.com/walles/shellprof
Ini menjalankan skrip Anda, secara transparan menandai semua baris yang dicetak, dan pada akhirnya mencetak daftar 10 baris teratas yang ada di layar terpanjang:
sumber