3.7. アプリケーションプロファイラー

プロファイリングは、プログラムの実行中にそのプログラムの動作についての情報を収集するプロセスです。アプリケーションのプロファイリングは、そのプログラムの全体的なスピードを高め、メモリ使用量を減らすためにプログラムのどの分野を最適化するかを決定するために行います。アプリケーションのプロファイリングツールは、このプロセスの簡素化に役立ちます。
Red Hat Enterprise Linux 6 では、SystemTapOProfileValgrind の 3 つのプロファイリングツールがサポートされています。これらのプロファイリングツールに関する資料は本ガイドの対象外となりますが、このセクションでは詳細情報のリンクと各プロファイラーに適したタスクの簡単な概要を提供します。

3.7.1. SystemTap

SystemTap は、トレーシング/プロービングツールです。このツールによりユーザーは、オペレーティングシステム (特にカーネル) のアクティビティの詳細な監視と分析を行うことができます。SystemTap は、netstatpstopiostat などのツールの出力と同様の情報を提供します。ただし、SystemTap には、収集した情報に対する追加のフィルタリングと分析オプションが含まれます。
SystemTap は、システムのアクティビティおよびアプリケーション動作のより深く、正確な分析を提供するので、システムとアプリケーションのボトルネックの位置がより正確に分かります。
Eclipse 用の Function Callgraph プラグインは、SystemTap をバックエンドとして使用します。これにより、関数呼び出しやリターン、時間、ユーザースペースの変数などを含むプログラムのステータスの完全な監視が可能になり、これらの情報が表示されることで最適化が視覚的に容易になります。
Red Hat Enterprise Linux 7 SystemTap Beginner's Guide』 には、パフォーマンスのプロファイリングやモニタリングに便利なスクリプトのサンプルがいくつか含まれています。これらはデフォルトで、/usr/share/doc/systemtap-client-version/examples ディレクトリーにインストールされます。

ネットワークモニタリングスクリプト (examples/network 内)

nettop.stp
5 秒ごとにプロセス (プロセス ID およびコマンド) のリストをプリントします。これには、この間隔で送受信されたパケット数やプロセスが送受信したデータ量が含まれます。
socket-trace.stp
Linux カーネルの net/socket.c ファイル内の各関数をインストルメント化して、追跡データをプリントします。
tcp_connections.stp
システムが受け入れた新たな受信 TCP 接続についての情報をプリントします。この情報には UID、接続を受け入れているコマンド、コマンドのプロセス ID、接続しているポート、リクエストの発信元の IP アドレスが含まれます。
dropwatch.stp
カーネル内の場所で解放されたソケットバッファー数を 5 秒ごとにプリントします。シンボリック名を見るには、--all-modules オプションを使用します。

ストレージモニタリングスクリプト (examples/io 内)

disktop.stp
読み込み/書き込みディスクの状態を 5 秒ごとに確認し、この期間の上位 10 位のエントリーを出力します。
iotime.stp
読み取り/書き込み操作に費やされた時間と読み取り/書き込みのバイト数をプリントします。
traceio.stp
観測された累積 I/O トラフィックに基づいて上位 10 位の実行可能ファイルを毎秒プリントします。
traceio2.stp
指定されたデバイスへの読み取りおよび書き込みが発生する際に実行可能ファイル名およびプロセス ID をプリントします。
inodewatch.stp
指定されたメジャー/マイナーデバイス上の指定された inode で読み取りおよび書き込みが発生するたびに、実行可能ファイル名とプロセス ID をプリントします。
inodewatch2.stp
指定されたメジャー/マイナーデバイス上の指定された inode で属性が変更されるたびに、実行可能ファイル名、プロセス ID、属性をプリントします。
latencytap.stp スクリプトは、異なるタイプの遅延が 1 つ以上のプロセスに及ぼす影響を記録します。30 秒ごとに遅延タイプのリストをプロセスの時間またはプロセスが待機した時間の合計の多い順で分類してプリントします。これは、ストレージとネットワークの両方の遅延の原因特定で便利なものです。Red Hat では、このスクリプトで --all-modules オプションを使用して遅延イベントのマッピングを有効にすることを推奨しています。デフォルトでは、このスクリプトは /usr/share/doc/systemtap-client-version/examples/profiling ディレクトリーにインストールされます。
SystemTap についての詳細は 『SystemTap Beginners Guide』 を参照してください。これは http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/ から入手できます。