Linuxコマンドの実行時間をテストするにはどうすればいいですか?

5867 ワード

仕事では、4つのNTPサーバから順番に時間を取得し、最も信頼できる時間をシステム時間に設定できるShellスクリプトを書いたことがあるかもしれません.
私たちは時間に対する要求が高いので、短時間で正しい時間を得る必要があります.このスクリプトの実行時間をテストし、実行開始から正確な設定までにどれだけの時間がかかるかを確認する必要があります.
実際には、スクリプトやプログラムの実行時間をテストする必要がある場合が多く、特に時間的な要求が高いシステムではなおさらです.
時間のテストでは、timeというコマンドを使用できます.次に、timeコマンドを使用してスクリプト/コマンドを測定する方法について詳しく説明します.

1.timeコマンドの基本的な使い方


timeコマンドの最も基本的な使い方は、time + です.例えば、
$ time ping baidu.com
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=1 ttl=56 time=2.83 ms
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=2 ttl=56 time=2.77 ms
…………
^C
--- baidu.com ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 10818ms
rtt min/avg/max/mdev = 2.765/2.808/2.862/0.039 ms

real    0m11.173s
user    0m0.004s
sys     0m0.002s

結果として、realはpingコマンドを実行してからctrl+cで終了するまでの時間を表す.userおよびsysは、pingコマンドがユーザ空間およびカーネル空間で実行される時間をそれぞれ示す.

2.時間情報をファイルに書き込む


画面に表示されるのではなく、時間情報を直接ファイルに書き込む場合は、-oオプションを使用して、書き込みのファイルパスを指定できます.
$ /usr/bin/time -o /home/alvin/time-output.txt ping baidu.com

このコマンドを実行すると、pingコマンドの出力結果は端末に残り、timeコマンドの結果は指定したtime-outputに書き込まれます.txtファイルにあります.-oオプションは、出力ファイルが存在しない場合に作成され、存在する場合は書き換えを直接上書きすることを示します.書き換えを上書きしたくないのではなく、ファイルの後ろに追加したい場合は、-aオプションを使用できます.
$ /usr/bin/time -a /home/smart/time-output.txt ping linoxide.com

3.より詳細な時間情報を表示


timeコマンドはオプションを持たないと表示される情報量が少なく、より詳細な情報を取得したい場合は-vオプションを使用できます.
$ /usr/bin/time -v ping baidu.com
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=1 ttl=56 time=2.75 ms
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=2 ttl=56 time=2.76 ms
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=3 ttl=56 time=2.85 ms
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=4 ttl=56 time=2.77 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3300ms
rtt min/avg/max/mdev = 2.751/2.785/2.851/0.075 ms
        Command being timed: "ping baidu.com"
        User time (seconds): 0.00
        System time (seconds): 0.00
        Percent of CPU this job got: 0%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.64
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 2140
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 626
        Voluntary context switches: 10
        Involuntary context switches: 0
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

この結果の情報はかなり詳細で、私たちが必要とする情報を十分に得ることができます.

4.カスタム出力フォーマット


デフォルトでは、timeコマンドはreal、usr、sysの3つのコンテンツのみを出力します.個性化したい場合は、出力フォーマットを定義し、timeコマンドもサポートされています.timeコマンドでサポートされるフォーマットは次のとおりです.
C - Name and command line arguments used
D - Average size of the process's unshared data area in kilobytes
E - Elapsed time in a clock format
F - Number of page faults
I - Number of file system inputs by the process
K - Average total memory use of the process in kilobytes
M - Maximum resident set the size of the process during the lifetime in Kilobytes
O - Number of file system outputs by the process
P - Percentage of CPU that the job received
R - Number of minor or recoverable page faults
S - Total number of CPU seconds used by the system in kernel mode
U - Total number of CPU seconds used by user mode
W - Number of times the process was swapped out of main memory
X - Average amount of shared text in the process
Z - System's page size in kilobytes
c - Number of times the process was context-switched
e - Elapsed real time used by the process in seconds
k - Number of signals delivered to the process
p - Average unshared stack size of the process in kilobytes
r - Number of socket messages received by the process
s - Number of socket messages sent by the process
t - Average resident set size of the process in kilobytes
w - Number of time the process was context-switched voluntarily
x - Exit status of the command

次のようなフォーマットを出力したい場合は、
Elapsed Time = 0:01:00, Inputs 2, Outputs 1

このようにカスタマイズできます.
$ /usr/bin/time -f "Elapsed Time = %E, Inputs %I, Outputs %O" ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=54 time=1.82 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=54 time=1.86 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 1.825/1.859/1.879/0.056 ms
Elapsed Time = 0:03.92, Inputs 0, Outputs 0

出力の結果を改行したい場合は、対応する場所に
を追加します.たとえば、次のようにします.
$ /usr/bin/time -f "Elapsed Time = %E 
Inputs %I
Outputs %O" ping baidu.com

これにより、出力された結果は次のようになります.
Elapsed Time = 0:03.92
Inputs 0
Outputs 0

見終わったのはすべて本当の爱で、いいねをつけてから行きましょうか?あなたの「三連」は良許の創作を続ける最大の原動力です!

  • オリジナル公式アカウント「良許Linux」に注目し、最新Linuxの乾物を最初に入手!
  • 公衆番号バックグラウンド返信【資料】【面接】【履歴書】第一線の大工場の面接、自己向上、履歴書などの資料を取得します.
  • 私のブログに注目してください:lxlinux.net