(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2023-08-08
(45)【発行日】2023-08-17
(54)【発明の名称】情報処理装置および情報処理方法
(51)【国際特許分類】
G06F 11/36 20060101AFI20230809BHJP
G06N 20/00 20190101ALI20230809BHJP
【FI】
G06F11/36 112
G06N20/00 130
(21)【出願番号】P 2023078382
(22)【出願日】2023-05-11
【審査請求日】2023-05-11
【早期審査対象出願】
(73)【特許権者】
【識別番号】397036309
【氏名又は名称】株式会社インターネットイニシアティブ
(74)【代理人】
【識別番号】100118902
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100195408
【氏名又は名称】武藤 陽子
(72)【発明者】
【氏名】柿島 純
【審査官】山本 俊介
(56)【参考文献】
【文献】特開2012-138044(JP,A)
【文献】特開2011-232814(JP,A)
【文献】特表2010-522905(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
プログラムの実行単位であるプロセス内の複数のスレッドの実行状態の遷移を記録するための変数を設定するように構成された設定部と、
前記プログラムの実行に応じて記録された、前記複数のスレッドの前記実行状態の遷移を示す変数の値を取得するように構成された取得部と、
前記取得部によって取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値を未知の入力として学習済みの分類器に与え、前記学習済みの分類器の演算を行って、前記プログラムの動作異常の原因に関する分類クラスを出力するように構成された分類部と、
前記分類部が出力した前記分類クラスに基づいて、前記プログラムの前記動作異常の原因を提示するように構成された提示部と
を備える情報処理装置。
【請求項2】
請求項1に記載の情報処理装置において、
さらに、前記取得部によって取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に基づいて、前記プログラムにおける前記動作異常の発生箇所を特定するように構成された特定部を備え、
前記提示部は、特定された前記動作異常の前記発生箇所を示す情報を提示するように構成されている
ことを特徴とする情報処理装置。
【請求項3】
請求項2に記載の情報処理装置において、
さらに、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に対して予め設定された前記動作異常の原因を正解ラベルとして付した教師データを用いて、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値と、前記動作異常の原因との関係を学習し、前記学習済みの分類器を構築するように構成された学習部を備える
ことを特徴とする情報処理装置。
【請求項4】
請求項3に記載の情報処理装置において、
前記複数のスレッドの前記実行状態の遷移を示す前記変数の値は、前記複数のスレッドのうちの第1スレッドが、第1実行状態において第1命令を実行した後に、または並行して、第2スレッドが第2命令を実行する第2実行状態へ遷移したことを示す第1の値、および、前記第1スレッドが前記第1命令を実行することができないため、前記第1スレッドの前記第1実行状態が正常に終了せず、前記第2実行状態へ遷移しなかったことを示す第2の値のいずれかを含む
ことを特徴とする情報処理装置。
【請求項5】
請求項4に記載の情報処理装置において、
前記特定部は、前記取得部によって取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値が前記第2の値を含む場合に、前記第2の値によって示される、正常に終了しなかった前記第1実行状態において前記第1スレッドが実行することができなかった前記第1命令が、前記プログラムにおける前記動作異常の前記発生箇所に対応すると特定する
ことを特徴とする情報処理装置。
【請求項6】
プログラムの実行単位であるプロセス内の複数のスレッドの実行状態の遷移を記録するための変数を設定する第1ステップと、
前記プログラムの実行に応じて記録された、前記複数のスレッドの前記実行状態の遷移を示す変数の値を取得する第2ステップと、
前記第2ステップで取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値を未知の入力として学習済みの分類器に与え、前記学習済みの分類器の演算を行って、前記プログラムの動作異常の原因に関する分類クラスを出力する第3ステップと、
前記第3ステップで出力された前記分類クラスに基づいて、前記プログラムの前記動作異常の原因を提示する第4ステップと
を備える情報処理方法。
【請求項7】
請求項6に記載の情報処理方法において、
さらに、前記第2ステップで取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に基づいて、前記プログラムにおける前記動作異常の発生箇所を特定する第5ステップを備え、
前記第4ステップは、特定された前記動作異常の前記発生箇所を示す情報を提示する
ことを特徴とする情報処理方法。
【請求項8】
請求項7に記載の情報処理方法において、
さらに、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に対して予め設定された前記動作異常の原因を正解ラベルとして付した教師データを用いて、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値と、前記動作異常の原因との関係を学習し、前記学習済みの分類器を構築する第6ステップを備える
ことを特徴とする情報処理方法。
【請求項9】
請求項8に記載の情報処理方法において、
前記複数のスレッドの前記実行状態の遷移を示す前記変数の値は、前記複数のスレッドのうちの第1スレッドが、第1実行状態において第1命令を実行した後に、または並行して、第2スレッドが第2命令を実行する第2実行状態へ遷移したことを示す第1の値、および、前記第1スレッドが前記第1命令を実行することができないため、前記第1スレッドの前記第1実行状態が正常に終了せず、前記第2実行状態へ遷移しなかったことを示す第2の値のいずれかを含む
ことを特徴とする情報処理方法。
【請求項10】
請求項9に記載の情報処理方法において、
前記第5ステップは、前記第2ステップで取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値が前記第2の値を含む場合に、前記第2の値によって示される、正常に終了しなかった前記第1実行状態において前記第1スレッドが実行することができなかった前記第1命令が、前記プログラムにおける前記動作異常の前記発生箇所に対応すると特定する
ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置および情報処理方法に関し、特に、プログラムの動作異常を特定する技術に関する。
【背景技術】
【0002】
近年、高機能なシステムやサービスを提供するために、ソフトウェアに対する要求は高度化および複雑化している。高機能なシステムに実装されるソフトウェアは、膨大なソースコードを有するプログラムで構成され、マルチスレッド処理などの並列化によって、プログラムの実行は一層複雑化している。
【0003】
運用中のシステムでプロセス障害や動作異常等が発生すると、プログラムにおいて障害や動作異常の原因となっている箇所を特定するのに時間を要する。障害を復旧するまでに長時間を要する場合には、サービス断が長時間にわたり、ユーザに与える影響が多大となる。
【0004】
従来から、プロセス実行中にシステム障害やプログラムの異常処理により、処理を継続できないようなエラーが発生し、プログラムが強制終了された場合、システム内のコア(core)ファイルにメモリ状態をダンプ(dump)する構成が知られている。例えば、特許文献1は、ハードディスクに出力されたcoreファイルをデバッガに読み込ませてエラーが発生した場所や、そのときの変数の値等を事後的に解析する技術を開示している。
【0005】
しかし、特許文献1に開示された技術では、プログラムの動作異常が発生した原因とエラーが発生した場所をログ情報からでは特定できないため、ソースコードをさらに解析することで原因とエラーが発生した場所を特定しなければならなかった。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
このように、従来の技術では、プログラムの動作異常が発生した場合に、動作異常の原因を容易に特定することができなかった。
【0008】
本発明は、上述した課題を解決するためになされたものであり、プログラムの動作異常が発生した場合に、動作異常の原因を容易に特定することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決するために、本発明に係る情報処理装置は、プログラムの実行単位であるプロセス内の複数のスレッドの実行状態の遷移を記録するための変数を設定するように構成された設定部と、前記プログラムの実行に応じて記録された、前記複数のスレッドの前記実行状態の遷移を示す変数の値を取得するように構成された取得部と、前記取得部によって取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値を未知の入力として学習済みの分類器に与え、前記学習済みの分類器の演算を行って、前記プログラムの動作異常の原因に関する分類クラスを出力するように構成された分類部と、前記分類部が出力した前記分類クラスに基づいて、前記プログラムの前記動作異常の原因を提示するように構成された提示部とを備える。
【0010】
また、本発明に係る情報処理装置において、さらに、前記取得部によって取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に基づいて、前記プログラムにおける前記動作異常の発生箇所を特定するように構成された特定部を備え、前記提示部は、特定された前記動作異常の前記発生箇所を示す情報を提示するように構成されていてもよい。
【0011】
また、本発明に係る情報処理装置において、さらに、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に対して予め設定された前記動作異常の原因を正解ラベルとして付した教師データを用いて、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値と、前記動作異常の原因との関係を学習し、前記学習済みの分類器を構築するように構成された学習部を備えていてもよい。
【0012】
また、本発明に係る情報処理装置において、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値は、前記複数のスレッドのうちの第1スレッドが、第1実行状態において第1命令を実行した後に、または並行して、第2スレッドが第2命令を実行する第2実行状態へ遷移したことを示す第1の値、および、前記第1スレッドが前記第1命令を実行することができないため、前記第1スレッドの前記第1実行状態が正常に終了せず、前記第2実行状態へ遷移しなかったことを示す第2の値のいずれかを含んでいてもよい。
【0013】
また、本発明に係る情報処理装置において、前記特定部は、前記取得部によって取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値が前記第2の値を含む場合に、前記第2の値によって示される、正常に終了しなかった前記第1実行状態において前記第1スレッドが実行することができなかった前記第1命令が、前記プログラムにおける前記動作異常の前記発生箇所に対応すると特定してもよい。
【0014】
上述した課題を解決するために、本発明に係る情報処理方法は、プログラムの実行単位であるプロセス内の複数のスレッドの実行状態の遷移を記録するための変数を設定する第1ステップと、前記プログラムの実行に応じて記録された、前記複数のスレッドの前記実行状態の遷移を示す変数の値を取得する第2ステップと、前記第2ステップで取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値を未知の入力として学習済みの分類器に与え、前記学習済みの分類器の演算を行って、前記プログラムの動作異常の原因に関する分類クラスを出力する第3ステップと、前記第3ステップで出力された前記分類クラスに基づいて、前記プログラムの前記動作異常の原因を提示する第4ステップとを備える。
【0015】
また、本発明に係る情報処理方法において、さらに、前記第2ステップで取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に基づいて、前記プログラムにおける前記動作異常の発生箇所を特定する第5ステップを備え、前記第4ステップは、特定された前記動作異常の前記発生箇所を示す情報を提示してもよい。
【0016】
また、本発明に係る情報処理方法において、さらに、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値に対して予め設定された前記動作異常の原因を正解ラベルとして付した教師データを用いて、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値と、前記動作異常の原因との関係を学習し、前記学習済みの分類器を構築する第6ステップを備えていてもよい。
【0017】
また、本発明に係る情報処理方法において、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値は、前記複数のスレッドのうちの第1スレッドが、第1実行状態において第1命令を実行した後に、または並行して、第2スレッドが第2命令を実行する第2実行状態へ遷移したことを示す第1の値、および、前記第1スレッドが前記第1命令を実行することができないため、前記第1スレッドの前記第1実行状態が正常に終了せず、前記第2実行状態へ遷移しなかったことを示す第2の値のいずれかを含んでいてもよい。
【0018】
また、本発明に係る情報処理方法において、前記第5ステップは、前記第2ステップで取得された、前記複数のスレッドの前記実行状態の遷移を示す前記変数の値が前記第2の値を含む場合に、前記第2の値によって示される、正常に終了しなかった前記第1実行状態において前記第1スレッドが実行することができなかった前記第1命令が、前記プログラムにおける前記動作異常の前記発生箇所に対応すると特定してもよい。
【発明の効果】
【0019】
本発明によれば、プログラムの実行に応じて記録された、複数のスレッドの実行状態の遷移を示す変数の値を未知の入力として学習済みの分類器に与え、学習済みの分類器の演算を行って、プログラムの動作異常の原因に関する分類クラスを出力する。そのため、プログラムの動作異常が発生した場合に、動作異常の原因を容易に特定することができる。
【図面の簡単な説明】
【0020】
【
図1】
図1は、本発明の実施の形態に係る情報処理装置を含む情報処理システムの構成を示すブロック図である。
【
図2】
図2は、本実施の形態に係る情報処理装置の概要を説明するための図である。
【
図3】
図3は、本実施の形態に係る情報処理装置のハードウェア構成を示すブロック図である。
【
図4】
図4は、本実施の形態に係る学習部による学習処理を説明するための図である。
【
図5】
図5は、本実施の形態に係る情報処理装置の動作を示すフローチャートである。
【
図6】
図6は、本実施の形態に係る情報処理装置の動作を示すフローチャートである。
【発明を実施するための形態】
【0021】
以下、本発明の好適な実施の形態について、
図1から
図6を参照して詳細に説明する。以下の説明では、一例として、5Gなどの所定の通信規格に準拠するコアネットワークが備える、通信制御を行うコアネットワーク装置2において実行されるプログラムを、情報処理装置1の処理対象とする。しかし、情報処理装置1が動作異常の原因を特定するプログラムを実装する装置は、コアネットワーク装置2に限定されない。
【0022】
[情報処理システムの構成]
まず、本発明の実施の形態に係る情報処理装置1を備える情報処理システムの概要について説明する。
図1に示すように、情報処理システムは、情報処理装置1と、コアネットワーク装置2とを備え、情報処理装置1とコアネットワーク装置2とは、WAN(Wide Area Network)、LAN(Local Area Network)、インターネットなどのネットワークNWを介して接続されている。
【0023】
本実施の形態に係る情報処理システムは、コアネットワーク装置2のコンピュータ上で実行されるプログラムの動作異常の原因を推論し、プログラムにおける動作異常の発生箇所を特定する。コアネットワーク装置2は、5Gコアネットワーク内に設けられて通信制御を行う。
【0024】
コアネットワーク装置2は、プロセッサ、主記憶装置、通信インターフェース、補助記憶装置、および入出力I/Oを備えるコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。コアネットワーク装置2は、例えば、Linux(登録商標)、Windows(登録商標)等の汎用マルチタスクOSを適用した装置である。
【0025】
コアネットワーク装置2のコンピュータ上で実行されるプログラムは、マルチスレッドのプロセスを含む。プログラムの実行単位であるプロセスは、OSによって管理され、プログラム内で利用される変数および状態を保持し、一つ以上のスレッドから構成される。
【0026】
スレッドは、CPUから見たプログラムの実行単位であり、各CPUコアに1つのスレッドが割り当てられる。OSは、各プロセスに独立したメモリ領域を割り当てるため、通常各プロセスでメモリ領域は共有しない。一方、スレッドは、プロセス内の同じメモリ領域を共有する。
【0027】
本実施の形態では、動作異常を推論する対象のプログラムは、1つのプロセスをマルチスレッドとシングルスレッドとの組み合わせにより実行する場合を一例として説明するが、プロセスはマルチプロセスであってもよい。
【0028】
また、本実施の形態において、スレッドの状態とは、スレッドに割り当てられたCPUコアの状態、各種変数値を保持しているメモリの状態を示す。スレッドの実行状態の遷移とは、プロセス内で命令を逐次または並列もしくは並行実行していく際に、スレッドがソースコードに従って所定の1以上の命令を実行する状態遷移をいう。
【0029】
例えば、スレッドはCPUコアが命令を実行するために必要なメモリ空間を確保して命令を実行する。このスレッドが命令を実行すると、CPUは次に実行する命令のアドレスを計算し、同じスレッドまたは、別のスレッドに切り替わって次の命令が実行される。このようなスレッドの状態の遷移を、実行状態の遷移という。
【0030】
スレッドが正常動作している場合においては、スレッドが所定の命令を実行した後、例えば、逐次同一もしくは別のスレッド、または同時に実行する別のスレッドが次の命令を実行する。一方において、スレッドに動作異常が発生した場合には、スレッドが正常に終了せず、次の命令を実行できない状態となる。このように本実施の形態では、スレッドの実行状態の遷移は、正常動作における状態遷移、または、何らかの動作異常によりスレッドが所定の命令をすべて実行できず、次の実行状態へ遷移できなかった状態遷移を示す。
【0031】
また、本実施の形態では、スレッドの各実行状態で実行される命令から、対応するソースコードの位置を特定することができる。ここで、ソースコードとは、プログラミング言語で記述されたテキストまたはテキストファイル等の文字列からなるコンピュータに対する命令をいう。ソースコードは、プログラムの構造や動作を定義し、スレッドで実行する関数やクラスなどの命令が記述されている。スレッドの生成は、ソースコードにおいて予め明示することができる。なお、スレッドは、実際にはソースコードをマシンコードに変換した命令を実行する。
【0032】
図2は、プログラムにおけるマルチスレッドおよびシングルスレッドの各スレッドの状態S
1,S
2,・・・,S
t-1,S
tを模式的に示した図である。
図2において、状態S
1,S
2,S
tは、シングルスレッドの動作における各実行状態を示している。各状態S
1~S
tにおいて、スレッドは、所定の1以上の命令を実行する。また、破線で囲まれた状態S
3,・・・,S
t-1およびS
3’,・・・,S
t-1’は、マルチスレッドの動作における各状態を示している。マルチスレッドにおいて四角で囲まれた状態S
3,・・・,S
t-1およびS
3’,・・・,S
t-1’はそれぞれトランザクションを構成する。
【0033】
例えば、プログラムにおいてプロセスが正常動作している場合、プロセス内の各スレッドの実行により、状態S1,S2,・・・,St-1,Stへと順番に、あるいは並行して実行状態が遷移していく。一方、何らかの動作異常が発生すると、あるスレッドの実行状態から次の実行状態へ遷移しない。なお、本実施の形態では、プログラムあるいはプロセスの正常動作、および動作異常といった場合に、特に、プロセス内のスレッドの動作を指すものとする。
【0034】
スレッドの動作異常の例として、
図2に示すデッドロックE2が挙げられる。マルチスレッドにおけるデッドロックとは、2つ以上のスレッドが互いにブロックし合い、それぞれのスレッドが、他方が終了するのを待機する動作異常である。デッドロックは、マルチスレッドにおいてメモリの排他制御の順序性を適切に行わないことにより発生する。
【0035】
スレッドの動作異常の別の例としては、
図2に示すヒープ・エラーE1が挙げられる。ヒープ・エラーは、プログラムが利用するメモリ領域であるヒープ領域の開放が不適切に行われることにより発生する動作異常である。つまり、ヒープ・エラーとは、ハッシュ関数を使ってメモリハントをする場合に、異なるプロセスで同一メモリ番号を使用することで発生する。その他にも、スタックオーバーフロー、無限ループ、スターベーション等が挙げられ、本実施の形態に係る情報処理装置1は、事前に設定されたスレッドにおける既知の動作異常の原因を推論する。
【0036】
コアネットワーク装置2において、デッドロックE2やヒープ・エラーE1などのスレッドの動作異常が発生すると、スレッドの実行状態は遷移できず、プロセスは強制終了する。プロセスの強制終了を示すシグナルは、ネットワークNWを介して、情報処理装置1へ送出される。情報処理装置1は、プロセスの強制終了シグナルを契機として、対象プロセス内の複数のスレッドの実行状態の遷移を示す変数の値に基づいて、動作異常の原因を推論し、かつ、プログラムにおける動作異常の発生箇所を特定する。
【0037】
[情報処理装置の機能ブロック]
図1に示すように、情報処理装置1は、設定部10、学習部11、記憶部12、取得部13、分類部14、特定部15、および提示部16を備える。
【0038】
設定部10は、プログラムの実行単位であるプロセス内の複数のスレッドの実行状態の遷移を記録するための変数を設定する。設定部10が設定する変数の値には、例えば、複数のスレッドのうちの第1スレッドが、第1実行状態において第1命令を実行した後に、または並行して、第2スレッドが次の第2命令を実行する第2実行状態へ遷移したことを示す第1の値を含む。さらに、変数の値には、第1スレッドが第1命令を実行することができないため、第1スレッドの第1実行状態は正常に終了せず、第2実行状態へ遷移しなかったことを示す第2の値を含む。
【0039】
具体的には、設定部10は、対象プログラムのソースコードにおいて、所定の1以上の命令ごとに、スレッドによる実行状態の遷移を記録するフラグを設定することができる。各実行状態を定義する所定の1以上の命令は、任意に設定することができ、例えば、スレッド間の実行順序、または、ソースコードの記述順序等に応じて設定することができる。
【0040】
例えば、
図2に示すように、プロセスが正常動作している場合において、スレッドが実行されて状態S
1から規定の状態S
2に遷移する。これは、例えば、スレッド間の実行順序に応じて、第1スレッドが第1命令を実行する状態S
1から、第2スレッドが第2命令を実行する状態S
2に遷移することを示す。このような正常動作において、設定部10は、状態S
1のフラグ値が「1」(第1の値)となるようにフラグを定義することができる。
【0041】
一方、何らかの動作異常が発生した場合においては、第1スレッドが第1命令を実行することができないため、状態S1が正常に終了せず、状態S1から、第2スレッドが第2命令を実行する次の状態S2に遷移しない。この場合には、設定部10は、状態S1のフラグ値が「0」(第2の値)となるようにフラグを定義する。
【0042】
例えば、
図2に示すように、プロセス内の各スレッドが正常動作している場合、スレッドの状態S
1~S
tまでのフラグの値は「1」となる。
【0043】
例えば、
図2に示すように、マルチスレッドの区間において、デッドロックE2が生じている場合、状態S
3,S
3’,・・・,S
t-1,S
t-1’のフラグ値はそれぞれ「0」となる。そして、後続のスレッドの状態S
tのフラグ値も「0」となる。一方、デッドロックE2が生ずる以前のシングルスレッドの区間における状態S
1,S
2のフラグ値は正常動作を示す「1」である。
【0044】
また、
図2に示すように、状態S
1から状態S
2に遷移するシングルスレッドの区間においてヒープ・エラーE1が生じている場合を例示する。この場合、スレッドは、状態S
1から状態S
2へ遷移できなかったため、状態S
1のフラグ値は「0」、およびその後の状態S
2のフラグ値も「0」となる。さらに、後続のマルチスレッド区間を含むすべてのスレッドの状態S
3,S
3’,・・・,S
t-1,S
t-1’,S
tのフラグ値も「0」となる。
【0045】
学習部11は、プログラムにおけるプロセス内の複数のスレッドの実行状態の遷移を示すフラグ値に対して予め設定された動作異常の原因を正解ラベルとして付した教師データを用いて、複数のスレッドの実行状態の遷移を示すフラグ値と、動作異常の原因との関係を学習し、学習済みの分類器を構築する。
【0046】
図4は、学習部11が学習する分類器の一例として用いるニューラルネットワーク構造を示す模式図である。
図4に示すように、分類器として、例えば、ニューラルネットワーク構造の機械学習モデルを採用し、入力層、隠れ層、および出力層のノードの数、隠れ層のレイヤ数等を設定する。学習部11は、動作異常の原因を推論するプログラムにおけるプロセス内のスレッドの実行状態の遷移のステップ数1~tに対応した、入力層の入力ノード数を設ける。出力層のノード数は、分類クラスに応じたノード数とすることができる。
【0047】
図4に示すように、入力層の各ノードは、上から順にスレッドの実行状態S
1~S
tにそれぞれ対応する。隠れ層hのレイヤ数、およびニューラルネットワークのノード間の結合の疎密を含む分類器のサイズや要素は、十分な推論精度が得られる設計であれば限定されず、例えば、ノード間の結合として全結合あるいはスパース化した構造であってもよい。
【0048】
学習部11は、教師データとして、後述する取得部13によってコアネットワーク装置2から取得されたスレッドの実行状態の遷移を示すフラグ値の実データを用いることができる。また、学習部11によって設定される出力層の分類クラスは、分類する動作異常の原因の数に応じて、2クラスまたは多クラス分類など任意に設定することができる。
【0049】
図4に示すニューラルネットワークは、入力層xに与えられた複数のスレッドの実行状態の遷移を示すフラグ値に対して、入力の重み付け総和に活性化関数を適用し、閾値処理により決定された出力を出力層yに渡す。出力層の各出力ノードは、動作異常の原因に関する分類クラスを示す。また、出力層yは、入力データが分類クラスに属する確率を出力することができる。
【0050】
学習部11は、複数のスレッドの実行状態の遷移を示すフラグ値を入力として与えたときの出力が、教師データのラベルに示される動作異常の原因を示す値となるように、ノード間の結線の重みwを調整する。学習部11は、例えば、誤差逆伝搬などを利用して、与えた入力値に対して、得られた出力値を比較し、それぞれの重みwの誤差を調べて逆方向に伝搬していき、最終的に重みwなどのパラメータを決定することができる。このような学習処理を経て、学習部11は、学習済みの分類器を構築する。
【0051】
記憶部12は、学習部11によって構築された、学習済みの分類器、つまり学習済みのパラメータを記憶する。本実施の形態では、記憶部12は、ニューラルネットワークの学習済み重みを記憶する。なお、記憶部12は、学習前の分類器についても記憶している。
【0052】
取得部13は、コアネットワーク装置2から、対象のプログラムにおけるプロセス内の複数のスレッドの実行状態の遷移を示すフラグ値を取得する。スレッドの実行状態の遷移を示すフラグ値は、設定部10によって設定されたフラグの値である。なお、取得部13は、コアネットワーク装置2からプロセスの強制終了シグナルを受信したことを契機として、複数のスレッドの実行状態の遷移を示すフラグ値を取得することができる。
【0053】
分類部14は、取得部13が取得した、複数のスレッドの実行状態の遷移を示すフラグ値を未知の入力として学習済みの分類器に与え、学習済みの分類器の演算を行って、プロセスの動作異常の原因に関する分類クラスを出力する。
図4の例では、分類部14は、分類クラスとして、例えば、予め設定された「正常動作」、「ヒープ・エラー」、および「デッドロック」のいずれかの値を出力することができる。
【0054】
特定部15は、取得部13によって取得された、複数のスレッドの実行状態の遷移を示すフラグ値に基づいて、プログラムにおける動作異常の発生箇所を特定する。取得部13によって取得された、複数のスレッドの実行状態の遷移を示すフラグ値は、学習済み分類器への各入力ノードへの入力値である。
【0055】
例えば、特定部15は、取得部13によって取得された、複数のスレッドの実行状態の遷移を示すフラグ値が「0」を含む場合に、フラグ値「0」によって示される、正常に終了しなかった第1実行状態(例えば、状態S1)において第1スレッドが実行することができなかった第1命令のソースコード上の位置が、プログラムにおける動作異常の発生箇所であると特定する。
【0056】
具体的には、
図2は、分類結果がヒープ・エラーE1であった場合に、スレッドの状態S
1のフラグ値が「0」、すなわち状態S
1から状態S
2に遷移できなかったことを示している。この場合、スレッドの状態S
1で示される実行状態のステップに対応するソースコードの位置において、ヒープ・エラーE1が発生したことを特定することができる。つまり、ソースコードにおいて、スレッドの状態S
1のフラグが設けられている位置を、ヒープ・エラーE1の発生箇所と特定することができる。
【0057】
提示部16は、分類部14が出力した分類クラスに基づいて、プログラムの動作異常の原因を提示する。また、提示部16は、特定部15によって特定された、ソースコードにおける動作異常の発生箇所を提示する。提示部16は、例えば、ネットワークNWを介して、外部のサーバ等に分類結果および特定結果を送信することができる。あるいは、提示部16は、コアネットワーク装置2に対して、分類結果および特定結果を送出してもよい。
【0058】
[情報処理装置のハードウェア構成]
次に、上述した機能を有する情報処理装置1を実現するハードウェア構成の一例について、
図3を用いて説明する。
【0059】
図2に示すように、情報処理装置1は、例えば、バス101を介して接続されるプロセッサ102、主記憶装置103、通信インターフェース104、補助記憶装置105、入出力I/O106を備えるコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
【0060】
主記憶装置103には、プロセッサ102が各種制御や演算を行うためのプログラムが予め格納されている。プロセッサ102と主記憶装置103とによって、
図1に示した設定部10、学習部11、分類部14、特定部15など情報処理装置1の各機能が実現される。
【0061】
通信インターフェース104は、情報処理装置1と各種外部電子機器との間をネットワーク接続するためのインターフェース回路である。
【0062】
補助記憶装置105は、読み書き可能な記憶媒体と、その記憶媒体に対してプログラムやデータなどの各種情報を読み書きするための駆動装置とで構成されている。補助記憶装置105には、記憶媒体としてハードディスクやフラッシュメモリなどの半導体メモリを使用することができる。
【0063】
補助記憶装置105は、情報処理装置1が実行する情報処理プログラムを格納するプログラム格納領域を有する。また、補助記憶装置105は、分類器の学習を行うための学習プログラムを格納する領域を有する。補助記憶装置105によって、
図1で説明した記憶部12が実現される。さらには、例えば、上述したデータやプログラムなどをバックアップするためのバックアップ領域などを有していてもよい。
【0064】
入出力I/O106は、外部機器からの信号を入力したり、外部機器へ信号を出力したりする入出力装置である。
【0065】
[情報処理装置の動作]
次に、上述した構成を有する情報処理装置1の動作を、
図5および
図6のフローチャートを参照して説明する。
図5は、情報処理装置1による学習処理を示すフローチャートである。
図6は、情報処理装置1による、学習済みの分類器を用いた分類処理および特定処理を示すフローチャートである。
【0066】
まず、
図5に示すように、設定部10は、コアネットワーク装置2において実行されるプログラムのプロセス内の複数のスレッドの実行状態の遷移を記録するためのフラグを設定する(ステップS1)。具体的には、設定部10は、事前に動作異常の原因を推論する対象のプログラムのソースコードにおいて、所定の1以上の命令ごとにスレッドの実行状態の遷移を記録するフラグを設定することができる。設定部10は、例えば、スレッド間の実行順序に応じて、各スレッドが実行する命令ごとに、スレッドの実行状態の遷移を定義することができる。
【0067】
次に、学習部11は、プロセス内の複数のスレッドの実行状態の遷移を示すフラグ値に対して、予め設定された動作異常の原因を正解ラベルとして付したデータを教師データとして、複数のスレッドの実行状態の遷移を示すフラグ値と、動作異常の原因との関係を学習し、学習済みの分類器を構築する(ステップS2)。
【0068】
例えば、学習部11は、複数のスレッドの実行状態の遷移を示すフラグ値に対して、「正常動作」、「ヒープ・エラー」、および「デッドロック」等、シングルスレッド、およびマルチスレッドのそれぞれで発生し得る動作異常の原因を正解ラベルとして付した教師データを用いることができる。
【0069】
次に、学習部11によって構築された学習済みの分類器、すなわち、学習済みのパラメータを、記憶部12に記憶させる(ステップS3)。
【0070】
次に、
図6に示すフローチャートを参照して、分類処理および特定処理を説明する。まず、取得部13は、プロセス内の複数のスレッドの実行状態の遷移を示すフラグ値を取得する(ステップS10)。取得部13は、コアネットワーク装置2から強制終了シグナルを受信したことを契機として、複数のスレッドの実行状態の遷移を示すフラグ値を、ネットワークNWを介してコアネットワーク装置2から取得することができる。
【0071】
次に、分類部14は、記憶部12から学習済みのパラメータをロードする(ステップS11)。続いて、分類部14は、ステップS10で取得部13が取得した、複数のスレッドの実行状態の遷移を示すフラグ値を未知の入力として学習済みの分類器に与え、学習済み分類器の演算を行って、プロセスの動作異常の原因に関する分類クラスを出力する(ステップS12)。例えば、分類部14は、分類クラスとして、「正常動作」、「ヒープ・エラー」、「デッドロック」等を示す値を出力する。
【0072】
次に、提示部16は、ステップS12で出力された分類クラスを提示する(ステップS13)。例えば、提示部16は、ネットワークNWを介して外部のサーバ等に推論された動作異常の原因を送出することができる。
【0073】
次に、特定部15は、ステップS10で取得され、学習済みの分類器に入力値として与えられた、複数のスレッドの実行状態の遷移を示すフラグ値に基づいて、プログラムにおいて動作異常の発生箇所を特定する(ステップS14)。例えば、特定部15は、状態S1~Stのフラグ値のうち、次の実行状態へ遷移できなかったことを示すフラグ値「0」が含まれている場合に、フラグ値「0」を有する状態S1~Stのうち、最も若いインデックス番号の状態に対応する命令の位置を、動作異常の発生箇所と特定することができる。
【0074】
例えば、スレッドの状態S1のフラグ値は「1」であり、状態S2のフラグ値は「0」であり、かつ、状態S3以降のフラグ値が「0」である場合において、分類結果として得られた分類クラスが「ヒープ・エラー」である場合を考える。この場合、ヒープ・エラーが、スレッドの状態S2に対応する命令の実行中に発生したため、状態S3以降の動作に遷移できなかったことがわかる。したがって、特定部15は、ソースコードにおいてスレッドの状態S2に対応する命令が記述された箇所を、ヒープ・エラーの発生箇所として特定する。
【0075】
次に、提示部16は、ステップS14で特定された動作異常の発生箇所を示す情報を提示する(ステップS15)。例えば、提示部16は、動作異常の発生箇所を示す情報を、ネットワークNWを介して外部のサーバ等に送出することができる。
【0076】
以上説明したように、本実施の形態に係る情報処理装置1によれば、複数のスレッドの実行状態の遷移を示すフラグ値を未知の入力として学習済みの分類器に与え、学習済みの分類器の演算を行って、プログラムの動作異常の原因に関する分類クラスを出力する。したがって、プログラムの動作異常が発生した場合に、動作異常の原因を容易に特定することができる。
【0077】
また、本実施の形態に係る情報処理装置1によれば、複数のスレッドの実行状態の遷移を示すフラグ値を参照することで、プログラムにおけるソースコード上の動作異常の発生箇所を容易かつ速やかに特定することができる。
【0078】
なお、上述した実施の形態では、分類器としてニューラルネットワークを用いる場合について説明した。しかし、分類器は、上述したニューラルネットワークモデルの他、ロジスティック回帰などの識別器を用いることができる。ロジスティック回帰を用いた場合には、各分類クラスを予測できる確率値を分類クラス数だけ得ることができる。その他にも、分類器として、SVM、ナイーブベイズ、ランダムフォレスト、決定木等、さらにニューラルネットワークを多層化したディープラーニングを用いてもよい。
【0079】
また、上述した実施の形態では、学習処理を行う学習部11および分類処理を行う分類部14の両方の機能部が情報処理装置1に搭載される場合について説明した。しかし、学習部11および分類部14は同一のハードウェア構成として設けられている場合の他、複数のサーバ等によって、学習処理と分類処理とをネットワークNW上の別のサーバ等により分散することもできる。
【0080】
以上、本発明の情報処理装置および情報処理方法における実施の形態について説明したが、本発明は説明した実施の形態に限定されるものではなく、請求項に記載した発明の範囲において当業者が想定し得る各種の変形を行うことが可能である。
【符号の説明】
【0081】
1…情報処理装置、2…コアネットワーク装置、10…設定部、11…学習部、12…記憶部、13…取得部、14…分類部、15…特定部、16…提示部、101…バス、102…プロセッサ、103…主記憶装置、104…通信インターフェース、105…補助記憶装置、106…入出力I/O、NW…ネットワーク。
【要約】
【課題】プログラムの動作異常が発生した場合に、動作異常の原因を容易に特定することを目的とする。
【解決手段】
プログラムの実行単位であるプロセス内の複数のスレッドの実行状態の遷移を記録するための変数を設定するように構成された設定部10と、プログラムの実行に応じて記録された、複数のスレッドの実行状態の遷移を示す変数の値を取得するように構成された取得部13と、取得部13によって取得された、複数のスレッドの実行状態の遷移を示す変数の値を未知の入力として学習済みの分類器に与え、学習済みの分類器の演算を行って、プログラムの動作異常の原因に関する分類クラスを出力するように構成された分類部14と、分類部14が出力した分類クラスに基づいて、プログラムの動作異常の原因を提示するように構成された提示部16とを備える。
【選択図】
図1