UNIXコマンド

【time】 コマンドの実行時間を計測して表示するコマンド

time

実行後に、実際の経過時間やユーザー、システムで消費されたCPU時間などの情報が出力され、プログラムのパフォーマンス評価や最適化の際に役立ちます。

シンプルな構文で利用できるため、開発や運用の現場で重宝されています。

基本構文と利用方法

構文の解説

time コマンドは指定したプログラムの実行時間およびリソース使用状況を計測し、その結果を出力する機能を持ちます。

基本的な構文は以下の通りです。

  • time <コマンド>
    • <コマンド> 部分に実行したいプログラムやシェルコマンドを指定します。
    • プログラムの終了後、経過時間やCPU使用時間などの情報が標準エラー出力または標準出力に表示されます。

time コマンドはシェル組み込み版と外部版が存在し、出力内容や挙動に若干の違いがあります。

シンプルな構文で手軽に使用できる一方、出力内容のカスタマイズや環境変数による制御も可能です。

基本例の紹介

例えば、sleep コマンドを計測する場合、下記のように記述します。

time sleep 3

この例では、sleep コマンドによって3秒間待機した後、実行にかかった時間やCPU使用状況が表示されます。

具体的な出力例は以下のようになります。

  • 実経過時間 (Elapsed time): 実際に経過した時間が表示される
  • ユーザーCPU時間 (User CPU time): プロセスがユーザーコードを実行する際に消費したCPU時間が示される
  • システムCPU時間 (System CPU time): システムコールなどを実行する際に消費したCPU時間が示される

各項目の出力内容を確認し、目的に応じた計測結果を活用することが可能です。

出力内容の詳細

Elapsed time(実経過時間)の表示

Elapsed time とは、プログラムの開始から終了までの総経過時間を示します。

この値は、システムクロックに基づいて計測され、プログラムがCPUを占有していなくても経過した時間が記録されます。

例えば、待機や入出力処理などが含まれている場合、CPU使用時間よりも大きな時間が表示されることが多いです。

  • 測定対象: プロセス全体の実行時間
  • 例: アプリケーションが多数のI/O操作を行う場合に有用

User CPU time(ユーザーCPU時間)の表示

User CPU time は、プログラムがユーザーレベルのコードを実行する際に消費したCPUの時間を示します。

この値は、計算などの処理にどれだけの時間を費やしたかを把握するのに役立ちます。

  • 測定対象: ユーザー空間での処理時間
  • 特徴: 一般的なアルゴリズム処理などの計算集約型タスクでの指標として重要

System CPU time(システムCPU時間)の表示

System CPU time は、プログラムがシステムコールやカーネル空間で実行する処理に要したCPU時間を表します。

入出力制御など、システムへ要求する処理が多いプログラムの場合、この値が大きくなる傾向があります。

  • 測定対象: カーネルモードで処理された時間
  • 特徴: ファイル操作やネットワーク通信などシステム資源を利用した処理の指標として活用可能

オプションと出力カスタマイズ

出力フォーマット変更方法

time コマンドは、デフォルトの出力から変更したフォーマットで結果を表示する設定をサポートしています。

複数の方法で出力形式を調整できるため、利用状況に合わせた最適な形式で表示可能です。

  • カスタマイズの利点:
    • 出力内容を必要に応じて抽出しやすくなる
    • 他のツールとの連携やパース処理が容易になる

環境変数TIME_FORMATの利用方法

環境変数 TIME_FORMAT を設定することで、time コマンドの出力形式を細かくコントロールできます。

この変数に書式指定子を設定すると、出力される内容が以下のように変更されます。

  • 例:
export TIME_FORMAT="実行時間: %E\nユーザーCPU: %U\nシステムCPU: %S"
time コマンド
  • %E: 経過時間
  • %U: ユーザーCPU時間
  • %S: システムCPU時間
  • ポイント:
    • 環境変数を設定することで、複数の time コマンド実行時に同一の出力フォーマットを適用可能
    • シェルの起動スクリプトなどに設定を記述することも可能

カスタムフォーマットの指定方法

外部版の time コマンドでは、コマンドラインオプションを使用してカスタムフォーマットを指定することも可能です。

例えば、-f オプションを利用して出力の形式を直接指定する方法がある。

  • 使用例:
/usr/bin/time -f "経過時間: %e秒, ユーザーCPU: %U秒, システムCPU: %S秒" コマンド
  • 利点:
    • 一度の実行ごとにフォーマット指定が可能
    • スクリプト内で動的に出力形式を変更できる

シェル組み込み版と外部版の違い

組み込み版timeの特徴

シェル組み込み版 time コマンドは、各種シェル(例: bash, zsh)により提供されており、外部プログラムを呼び出す必要がないため、軽量で高速に動作します。

  • 主な特徴:
    • シェル起動時に既に読み込まれているため、追加のプロセス作成が不要
    • 基本的な計測情報の表示が中心
    • 一部の形式変更オプションに制限がある場合がある

外部版timeの特徴

外部版 time コマンドは、GNU time など専用のプログラムとして提供され、より細かな計測やカスタマイズオプションが利用可能です。

  • 主な特徴:
    • 豊富なフォーマット指定オプションが用意されている
    • 環境変数 TIME_FORMAT-f オプションによる柔軟なカスタマイズが可能
    • 高度な計測結果の詳細な出力が必要な場合に適する

利用環境に応じた選択基準

どちらの time コマンドを使用するかは、以下の基準で判断することが推奨されます。

  • シンプルな計測で十分な場合は、シェル組み込み版で問題ない
  • 高度なフォーマット指定やカスタム出力が必要な場合は、外部版を選択する
  • 利用環境のシェルやOSのバージョンにより、利用可能なオプションが異なるため、事前の確認が必要

利用時の注意点

計測精度に関する留意点

time コマンドが提供する計測結果は、必ずしも高精度ではない場合があります。

特に以下の点に注意が必要です。

  • 他のプロセスやシステム負荷により、実経過時間が変動する可能性
  • 很小な処理の場合、計測値に誤差が含まれること
  • システムやハードウェアの特性に依存する部分がある
  • 注意事項:
    • 複数回計測し、平均値などを利用することが推奨される
    • 高精度な計測が必要な場合は、専用ツールの利用を検討する

リダイレクトやパイプとの組み合わせ時の注意事項

time コマンドの出力が標準出力ではなく標準エラー出力に送られる場合があるため、リダイレクトやパイプを利用する際は注意が必要です。

  • リダイレクトの例:
time ls > output.txt 2> time.txt
  • ls の出力は output.txt に、time コマンドの結果は time.txt に書き込まれる
  • 注意事項:
    • パイプでコマンドの出力を他のツールに渡す場合、time コマンドの出力が混在しないようにする工夫が必要
    • コマンド実行時の入出力の設定を意識し、適切にリダイレクトを実施することが推奨される

まとめ

この記事では、time コマンドの基本構文や利用方法、出力結果(実経過時間、ユーザーCPU時間、システムCPU時間)の意味を解説しました。

また、環境変数やオプションによるカスタムフォーマット設定、シェル組み込み版と外部版の特徴および選択基準、さらに利用時の注意点について説明しています。

関連記事

Back to top button