Linuxでコマンドや処理の実行時間を調べる方法

Linuxでコマンドや処理の実行時間を調べるための方法をいくつか紹介します。

用途に合わせてお好きな方法を使用してください。

timeコマンドを使用

「time」コマンドは、コマンドの実行時間を計測するためのコマンドで、下記のように実行するコマンドを引数として指定して使用することでコマンドの実行時間を表示させることが出来ます。

time コマンド

計測する時間は下記の3種類となります。

  • real コマンドの実行時間
  • user ユーザCPU時間
  • sys システムCPU時間

実際に「sleep 10」コマンドを実行して時間を計測してみます。

$ time sleep 10

real    0m10.003s
user    0m0.000s
sys     0m0.001s

「real」部分の時間がコマンドの実行時間となるため、「sleep 10」コマンドを実行するのに約10秒かかったことが分かります。(10秒sleepさせてるので当たり前ですが…)

dateコマンドを使用

コマンドを実行する前に「date +%s」コマンドでUNIX時間(1970年01月01日 00時00分00秒(UTC) から経過した秒数)を取得しコマンド実行後に再度「date +%s」コマンドでUNIX時間を取得します。

最初と最後に取得したUNIX時間の差分を求めることで実行時間を計測することが出来ます。

下記は実際に実行時間を計測するためのシェルスクリプト例となります。

今回は計測するコマンドとして「sleep 10」を設定していますが、実際には適宜計測したいコマンドや処理に置き換えてください。

#!/bin/bash

start_time=`date +%s`

### 計測したい処理・コマンド ###
sleep 10

end_time=`date +%s`

run_time=$((end_time - start_time))

echo $run_time

実際に実行してみると、実行時間が10秒であることが表示されました。

$ sh ./date.sh
10

ワンライナーだとこんな感じになります。

$ start_time=`date +%s`; sleep 10; end_time=`date +%s`; run_time=$((end_time - start_time)); echo $run_time
10

開始と終了の時刻が知りたい

コマンドや処理を実行した時刻と終了した時刻が知りたい場合は、最初と最後に「date」コマンドで現在の時刻を取得してそれを出力すると良いでしょう。

表示させる日時のフォーマットはお好きなように設定してください。

日時を表示させるフォーマットには色々な種類がありますので、下記ページを参考してみてください。

https://www.server-memo.net/tips/command/date/date.html

1から10までの数字を1秒ごとに表示させるという処理の開始時刻と終了時刻を表示させてみます。

#!/bin/bash

start_time=`date "+%Y-%m-%d %H:%M:%S"`
echo $start_time

### 計測したい処理・コマンド ###
for i in {1..10}
do
  echo $i
  sleep 1
done

end_time=`date "+%Y-%m-%d %H:%M:%S"`
echo $end_time

実際に実行させると、下記のように開始と終了の日時が表示されます。

$ sh ./date_2.sh 
2019-02-05 23:49:06
1
2
3
4
5
6
7
8
9
10
2019-02-05 23:49:16

bashのSECONDS変数を使用

「bash」には「SECONDS」という変数があり、これにはシェルが起動してからの経過秒数が格納されています。

また、「SECONDS」変数には任意の値を設定することが可能であり、設定後はそこから経過した秒数が足されていきます。

これを使用すると簡単に経過した秒数を計測することが出来ます。

下記のスクリプトでは実行時間を計測するコマンドを「sleep 10」としていますが、適宜計測したいコマンドや処理に変更してください。

#!/bin/bash

# 初期化
SECONDS=0

### 計測したい処理・コマンド ###
sleep 10

run_time=$SECONDS

echo $run_time

実際に実行してみると、処理に掛かった時間が10秒であることが表示されました。

$ sh ./seconds.sh
10

ワンライナーだと下記のようになります。

$ SECONDS=0; sleep 10; run_time=$SECONDS; echo $run_time
10

実際に計測を行う場合は、「sleep 10」の部分を実行時間を計測したコマンドや処理に適宜入れ替えてください。

コメント

タイトルとURLをコピーしました