Làm thế nào tôi có thể đo thời gian thực hiện của một quá trình thiết bị đầu cuối?


160

Tôi đang cố gắng đo thời gian thực hiện của một quy trình mà tôi gọi thông qua dòng lệnh (nghĩa là tôi muốn tìm hiểu mất bao lâu để quá trình hoàn tất). Có bất kỳ lệnh nào mà tôi có thể thêm vào lệnh gọi quá trình sẽ đạt được điều này không?

Câu trả lời:


197

Thêm timetrước lệnh bạn muốn đo. Ví dụ : time ls.

Đầu ra sẽ như sau:

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

Giải thích trên real, usersys(từ man time):

  • real: Đã qua thời gian thực (đồng hồ treo tường) được sử dụng bởi quy trình, tính bằng giây.
  • user: Tổng số giây CPU mà quá trình sử dụng trực tiếp (ở chế độ người dùng), tính bằng giây.
  • sys: Tổng số giây CPU được sử dụng bởi hệ thống thay mặt cho quá trình (ở chế độ kernel), tính bằng giây.

1
@ninjalj, bạn có thể cung cấp thêm thông tin về những gì real, usersysthời gian được rằng lệnh này lợi nhuận?
Christopher Kyle Horton

2
@JacobVlijm Câu trả lời này không quá phức tạp. :) Bạn có thể chỉnh sửa trong bình luận của bạn và làm cho nó như vậy.
muru

1
Lưu ý rằng bạn có thể cần sudo apt-get install timenếu bạn đang sử dụng shell timekhông phải là nội trang.
poolie

1
Lưu ý rằng đây là đầu ra từ timenội dung của Bash , nhưng man timesẽ là về một tệp thực thi (như /usr/bin/time, từ timegói) và đầu ra của nó sẽ khác. Cũng trong Bash, bạn có thể chạy help timeđể được giúp đỡ với nội dung.
wjandrea

Lưu ý rằng kết thúc quá trình không có nghĩa là tất cả công việc đã kết thúc. Một bản sao có thể mất thêm vài phút sau khi trả về "thời gian" cho việc xóa hệ thống (cũng với thời gian sys chưa được phân bổ).
ubfan1

43

Để đo delta theo từng dòng, hãy thử gnomon .

Nó là một tiện ích dòng lệnh, giống như ts của moreutils, để thêm thông tin dấu thời gian vào đầu ra tiêu chuẩn của một lệnh khác. Hữu ích cho các quy trình dài mà bạn muốn ghi lại lịch sử về những gì mất quá nhiều thời gian.

Đường ống bất cứ điều gì đến gnomon sẽ đưa ra dấu thời gian cho mỗi dòng, cho biết dòng đó là dòng cuối cùng trong bộ đệm bao lâu - nghĩa là mất bao lâu để dòng tiếp theo xuất hiện. Theo mặc định, gnomon sẽ hiển thị các giây trôi qua giữa mỗi dòng, nhưng đó là cấu hình.

bản demo của Gnomon


2
Điều này là khá trơn tru.
Nathan Arthur

1
(lỗi đánh máy trong link, may mắn là URL ok). Bạn có thể cài đặt nó sudo npm i gnomon -gnếu bạn có npm. Không chắc chắn nó hoạt động tốt như thế nào đối với các dòng "tiến bộ" bằng cách sử dụng '\ r' (nằm trên cùng một dòng): trong trường hợp đó tôi muốn nó tính tất cả là một dòng dài, không tách rời nhau.
Tomasz Gandor

Vì vậy, chúng tôi ống nó để gnomon! đó là nó ?
Ciasto piekarz


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

Chạy lệnh này trong thiết bị đầu cuối sẽ cung cấp cho bạn tổng thời gian để xử lý tệp


Điều này sẽ cung cấp cho bạn thời gian bắt đầu và thời gian kết thúc, không phải thời lượng.
wjandrea

Đây là một câu trả lời tốt, trong một số trường hợp. Ví dụ: findlệnh sau - không có 2>/dev/nullchuyển hướng - cung cấp các Permission denied thông báo đa dạng. Tuy nhiên, việc thêm 2>/dev/nullvào lệnh đó sẽ phá vỡ timephần của lệnh đó. Sau đây cung cấp một thỏa hiệp tốt : 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", đưa ra (ví dụ) /usr/lib/libname-server-2.a find command took 3 sec làm đầu ra duy nhất.
Victoria Stuart

Một phụ lục cho nhận xét của tôi: tất nhiên, bạn có thể chỉ cần chạy time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(tức là, như sudo) - tránh những Permission deniedcảnh báo đó.
Victoria Stuart

4

Thỉnh thoảng tôi thấy mình cần một chiếc đồng hồ bấm giờ để tính thời gian cần thiết cho một hành động như khởi động ứng dụng của tôi, trong trường hợp đó, nhiều giải pháp ở đây không hữu ích.

Đối với điều này, tôi thích sử dụng sw .

sw

Tải về

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

Sử dụng

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.