ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
Oracle Solaris Studio 12.3: スレッドアナライザユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
スレッドアナライザを使用して、プログラム内の潜在的デッドロックおよび実デッドロックを確認できます。スレッドアナライザは、Oracle Solaris Studio パフォーマンスアナライザが使用するものと同じ収集-分析モデルに従います。
スレッドアナライザを使用するには、次の 3 つの手順を行います。
ソースコードをコンパイルする。
デッドロック検出実験を作成する。
実験結果を検する。
コードをコンパイルし、必ず -g を指定します。高度な最適化では、行番号や呼び出しスタックなどの情報が間違って報告される場合があるので、高度な最適化は指定しないでください。-g -xopenmp=noopt を付けて OpenMP プログラムをコンパイルし、-g -mt だけを付けて POSIX スレッドプログラムをコンパイルします。
これらのオプションについては、cc(1)、CC(1)、または f95 (1) のマニュアルページを参照してください。
このチュートリアルの場合、次のコマンドを使用してコードをコンパイルします。
% cc -g -o din_philo din_philo.c
-r deadlock オプションを付けてスレッドアナライザの collect コマンドを使用します。このオプションは、プログラムの実行中にデッドロック検出実験を作成します。
このチュートリアルの場合、次のコマンドを使用して、din_philo.1.er というデッドロック検出実験を作成します。
% collect -r deadlock -o din_philo.1.er din_philo
複数のデッドロック検出実験を作成することによって、デッドロックを検出する可能性を高められます。実験ごとに異なるスレッド数と異なる入力データを使用してください。たとえば、din_philo.c コードで、次の行の値を変更できます。
13 #define PHILOS 5 14 #define DELAY 5000 15 #define FOOD 100
続いて、前述のようにコンパイルして、別の実験結果を収集できます。
詳しくは、collect(1) および collector(1) のマニュアルページを参照してください。
スレッドアナライザ、パフォーマンスアナライザ、er_print ユーティリティーで、デッドロック検出実験を検証できます。スレッドアナライザおよびパフォーマンスアナライザはどちらも GUI インタフェースを表示します。スレッドアナライザはデフォルトの簡略セットのタブを表示しますが、それ以外はパフォーマンスアナライザと同じです。
スレッドアナライザを開始して、din_philo.1.er 実験結果を開くには、次のコマンドを入力します。
% tha din_philo.1.er
スレッドアナライザは、メニューバー、ツールバー、および各種表示用のタブを含む分割区画で構成されます。
デッドロック検出用に収集された実験結果を開くと、デフォルトで、左側の区画に次のタブが表示されます。
「デッドロック」タブ
このタブには、潜在的デッドロックと実デッドロックの一覧が示されます。デフォルトでこのタブが選択されています。各デッドロックに関わるスレッドが示されます。これらのスレッドは、各スレッドがロックを保持し、チェーン内の次のスレッドが保持している別のロックを要求するという巡回チェーンを形成しています。
「デュアルソース」タブ
「デッドロック」タブで巡回チェーン内のスレッドを選択し、続いて「デュアルソース」タブをクリックします。「デュアルソース」タブには、スレッドがロックを保持したソース位置と、同じスレッドがロックを要求したソース位置が示されます。スレッドがロックを保持し要求したソース行が強調表示されます。
「実験」タブ
このタブには、実験でのロードオブジェクトが表示され、エラーおよび警告メッセージが一覧表示されます。
スレッドアナライザ画面の右側区画に次のタブが表示されます。
「デッドロック」タブから選択したデッドロックの概要情報を示した「概要」タブ。
「デッドロック」タブから選択したスレッドコンテキストの詳細情報を示した「デッドロックの詳細」タブ。
er_print ユーティリティーは、コマンド行インタフェースを表示します。インタラクティブセッションで er_print ユーティリティーを使用して、セッション中にサブコマンドを指定します。コマンド行オプションを使用して、インタラクティブでない方法でもサブコマンドを指定できます。
次のサブコマンドは、 er_print ユーティリティーでデッドロックを調べるときに役立ちます。
-deadlocks
このオプションは、実験で検出された潜在的デッドロックおよび実デッドロックについて報告します。(er_print) プロンプトで deadlocks を指定するか、er_print コマンド行で -deadlocks を指定します。
-ddetail deadlock_id
このオプションは、指定した deadlock_id を持つデッドロックの詳細な情報を返します。(er_print) プロンプトで ddetail を指定するか、er_print コマンド行で -ddetail を指定します。指定された deadlock_id が all の場合、すべてのデッドロックの詳細情報が表示されます。それ以外では、最初のデッドロックを表す 1 などの単一のデッドロック番号を指定します。
-header
このオプションは、実験に関する記述的情報を表示し、すべてのエラーまたは警告を報告します。(er_print) プロンプトで header と指定するか、コマンド行で -header と指定します。
詳細は、collect(1)、tha(1)、analyzer(1)、および er_print(1) のマニュアルページを参照してください。