🗂

シェルで処理時間計測

2022/02/11に公開

シェルで処理時間計測

時間計測のスクリプト

#!/bin/sh

TIME1=$(cat /proc/uptime | awk '{print $1}')
echo time1: $TIME1

# 計測したい処理ここから
echo waiting 1 sec
sleep 1
# 計測したい処理ここまで

TIME2=$(cat /proc/uptime | awk '{print $1}')
echo time2: $TIME2

DIFF=$(echo "$TIME2 - $TIME1" | bc)

echo diff: $DIFF

ポイント

  • /proc/uptime で稼働時間をとる。
  • awk で必要な個所を抜き出す。
  • bc コマンドで引き算を計算する。

解説

cat /proc/uptime

cat /proc/uptime を実行すると以下のような出力が得られます。

$ cat /proc/uptime
20524.79 327937.44

https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html にあるように
それぞれの数値は、システム起動時から経過した時間 (秒) と アイドル (idle) しているプロセスが消費した時間という意味です。

awk '{print $1}'

awk '{print $1}' を実行することにより空白で区切られた項目の一番先頭を抜き出すことができるので、cat /proc/uptime の出力に対して cat /proc/uptime | awk '{print $1}' と実行してやることにより、システム起動時から経過した時間 (秒) の数値を取り出します。

$(コマンド) により、コマンド で指定したコマンド出力結果を変数化できます。

処理開始前と処理開始後にそれぞれ $(cat /proc/uptime | awk '{print $1}') を行うことにより、処理開始前のシステム起動時間と処理開始後のシステム起動時間を取得できます。

$(echo "$TIME2 - $TIME1" | bc)

シェルの機能で以下のようにすると

DATA1=1
DATA2=2
echo $(($DATA2-$DATA1))

のようにすると変数同士で四則演算ができる機能がありますが、
cat /proc/uptime が返す結果は小数点以下の値を含むので使えません。

参考サイトにあるように bc コマンドを使うことで小数点を含む値でも計算できます。

$(echo "$TIME2 - $TIME1" | bc) のようにすることで、処理開始前と処理開始後の起動時間の差、つまり処理時間を計算できます。

参考サイト

https://genzouw.com/entry/2019/02/18/122158/889/

https://linuxjm.osdn.jp/html/GNU_bc/man1/bc.1.html

https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html

Discussion