数年前、私はこの記事をサンドボックス用に書いて、habrコミュニティの一部になることを夢見ていた。 今日、ドラフトを掘り下げて、未公開であることがわかり(この記事に基づいてwikiページを作成しました)、仕事でSystemTapを使用しているユーザーからフィードバックとユーザーケースを収集するために公開することにしました。
1. SystemTapとは誰のためで、なぜ必要なのですか?
SystemTapは、実行中のLinuxシステムに関する情報を収集および分析できるツールです。
netstat、ps、topなどの組み込みツールとは異なり、SystemTapは情報を収集および表示するためのより多くのオプションを提供するように設計されています。
SystemTapは、コマンドラインインターフェイスおよびスクリプトプログラミング言語です。
システム管理者はSystemTapを使用してシステムパフォーマンスを監視および分析でき、ソフトウェア開発者はSystemTapを使用して実行中のシステム上のアプリケーションの動作を分析できます。
Red Hat、IBM、Oracle Corporation、Hitachiなどの企業は、SystemTapプロジェクトの開発に参加しています。
2. SystemTapはどのように機能しますか?
SystemTapの主なアイデアは、イベントにラベルを付け、ハンドラーをそれらに割り当てることです。
スクリプトの実行中、SystemTapはイベントを監視し、イベントが発生するとすぐに、システムのカーネルがハンドラーを実行します。
イベントは、SystemTapセッションの開始または終了、タイマーなどです。
ハンドラーは、イベントがトリガーされた後に実行される一連のスクリプトステートメントです。 通常、ハンドラーはイベントのコンテキストから情報を抽出するか、画面に情報を表示します。
SystemTapセッションは、スクリプトを実行すると開始されます。 この時点で、次の一連のアクションが発生します。
1.最初に、SystemTapは、スクリプトで使用されているものの存在について「タップセット」のライブラリをチェックします。
2.次に、SystemTapはスクリプトをC(プログラミング言語)に変換し、システムコンパイラを起動して、スクリプトからカーネルモジュールを作成します。
3. SystemTapはモジュールをロードし、スクリプト内のすべてのイベントをアクティブにします。
4.イベントが発生するとすぐに、このイベントのハンドラーが実行されます。
5.すべてのイベントが完了すると、モジュールがアンロードされ、セッションが終了します。
3. SystemTapスクリプトの書き方
イベントとSystemTapについて
SystemTapには、同期と非同期の2種類のイベントがあります。
同期イベントは、カーネルコードの特定の場所にある命令にバインドされます。
同期イベントの例:
-syscall.system_call
-vfs.file_operation
-kernel.function(「関数」)
-module( "module")。Function( "function")
非同期イベントは、特定の命令やカーネルコードの特定の場所に関連付けられていません。
非同期イベントの例:
-begin-SystemTapセッションの開始
-終了-SystemTapセッションの終了
-timer.event()-タイマーのカウントダウン(timer.s(4)-イベントは4秒ごとに起動します)
SystemTapのハンドラーについて
イベントハンドラーは中かっこ({})で囲まれています。
画面を表示するには、printf形式の出力関数(「format string \ n」、引数)を使用します。これは、C(プログラミング言語)の同様の関数に似ています。
printf()で使用するいくつかのSystemTap関数:
-pid()-プロセスID
-uid()-ユーザーID
-execname()-プロセス名
-cpu()-プロセッサー番号
スクリプトを書く
スクリプト:
syscall.openをプローブします
{
printf( "%s(%d)open \ n"、execname()、pid())
}
結果:
vmware-guestd(2206)オープン
ハルド(2360)オープン
ハルド(2360)オープン
ハルド(2360)オープン
df(3433)オープン
df(3433)オープン
df(3433)オープン
ハルド(2360)オープン
これはSystemTapテクノロジーの概要です。
Systemtapの詳細については、 公式Webサイトにアクセスすることをお勧めします。