Bagaimana saya bisa mengukur waktu eksekusi dari proses terminal?


160

Saya mencoba untuk mengukur waktu eksekusi dari suatu proses yang saya panggil melalui baris perintah (yaitu, saya ingin mengetahui berapa lama waktu yang dibutuhkan untuk proses untuk menyelesaikan). Apakah ada perintah yang bisa saya tambahkan ke perintah yang memanggil proses yang akan mencapai ini?

Jawaban:


198

Tambahkan timesebelum perintah yang ingin Anda ukur. Sebagai contoh: time ls.

Outputnya akan terlihat seperti:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

Penjelasan tentang real, userdan sys(dari man time):

  • real: Waktu nyata (jam dinding) yang digunakan oleh proses, dalam detik.
  • user: Jumlah total CPU-detik yang digunakan proses secara langsung (dalam mode pengguna), dalam detik.
  • sys: Jumlah total CPU-detik yang digunakan oleh sistem atas nama proses (dalam mode kernel), dalam detik.

1
@ninjalj, Anda dapat memberikan informasi lebih lanjut tentang apa yang real, userdan syskali bahwa perintah ini kembali?
Christopher Kyle Horton

2
@ JacobVlijm Jawaban ini tidak rumit. :) Anda dapat mengedit komentar Anda dan membuatnya begitu.
muru

1
Perhatikan bahwa Anda mungkin perlu sudo apt-get install timejika Anda menggunakan shell timeyang bukan builtin.
poolie

1
Perhatikan bahwa ini adalah output dari Bash's timebuiltin, tetapi man timeakan menjadi executable (seperti /usr/bin/time, dari timepaket), dan outputnya akan terlihat berbeda. Juga di Bash, Anda dapat menjalankan help timebantuan dengan builtin.
wjandrea

Perhatikan bahwa akhir proses tidak berarti semua pekerjaan selesai. Salinan dapat mengambil menit tambahan setelah "waktu" kembali untuk buffer sistem pembilasan (karenanya dengan waktu sistem yang tidak terisi juga).
ubfan1

43

Untuk pengukuran delta baris demi baris, coba gnomon .

Ini adalah utilitas baris perintah, sedikit seperti ts lebihututils, untuk menambahkan informasi timestamp ke output standar dari perintah lain. Berguna untuk proses jangka panjang di mana Anda ingin catatan sejarah tentang apa yang butuh waktu lama.

Memipiskan apa pun ke gnomon akan menambahkan cap waktu ke setiap baris, yang menunjukkan berapa lama garis itu adalah baris terakhir di buffer - yaitu, berapa lama garis berikutnya muncul. Secara default, gnomon akan menampilkan detik yang telah berlalu di antara setiap baris, tetapi itu dapat dikonfigurasi.

gnomon demo


2
Ini sangat apik.
Nathan Arthur

1
(salah ketik tautan, untungnya URL ok). Anda dapat menginstalnya sudo npm i gnomon -gjika sudah npm. Tidak yakin seberapa baik hal ini terhadap baris "progres" menggunakan '\ r' (tetap pada baris yang sama): dalam hal ini saya ingin menghitungnya sebagai satu garis panjang, bukan garis yang terpisah.
Tomasz Gandor

jadi kami menyalurkannya ke gnomon! itu dia ?
Ciasto piekarz


8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

Menjalankan perintah ini di terminal akan memberi Anda waktu total untuk mengatasi suatu file


Ini akan memberi Anda waktu mulai dan waktu selesai, bukan durasi.
wjandrea

Ini adalah jawaban yang bagus, dalam beberapa keadaan. Misalnya, findperintah berikut - tanpa 2>/dev/nullarahan ulang - memberikan pesan berlebihan Permission denied . Namun, menambahkan 2>/dev/nullke perintah itu merusak timebagian dari perintah itu. Berikut ini memberikan kompromi yang baik:, START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"memberi (misalnya) /usr/lib/libname-server-2.a find command took 3 sec sebagai output tunggal.
Victoria Stuart

Tambahan untuk komentar saya: tentu saja, Anda dapat menjalankan time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(yaitu, sebagai sudo) - menghindari banyak Permission deniedperingatan.
Victoria Stuart

4

Kadang-kadang saya menemukan diri saya memerlukan stopwatch untuk menghitung berapa lama waktu yang diperlukan untuk tindakan seperti boot aplikasi saya, dalam hal ini banyak solusi di sini tidak berguna.

Untuk ini saya suka menggunakan sw .

sw

Pasang

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

Pemakaian

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.