(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-05-29
(45)【発行日】2024-06-06
(54)【発明の名称】プロセス管理装置およびプロセス管理方法
(51)【国際特許分類】
G06F 11/07 20060101AFI20240530BHJP
G06F 18/2433 20230101ALI20240530BHJP
G06N 20/00 20190101ALI20240530BHJP
【FI】
G06F11/07 190
G06F11/07 140E
G06F18/2433
G06N20/00 130
(21)【出願番号】P 2024020792
(22)【出願日】2024-02-15
【審査請求日】2024-02-15
【早期審査対象出願】
(73)【特許権者】
【識別番号】397036309
【氏名又は名称】株式会社インターネットイニシアティブ
(74)【代理人】
【識別番号】100118902
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100195408
【氏名又は名称】武藤 陽子
(72)【発明者】
【氏名】柿島 純
【審査官】渡辺 一帆
(56)【参考文献】
【文献】特許第7329162(JP,B2)
【文献】特開2009-223362(JP,A)
【文献】特許第7414135(JP,B2)
【文献】国際公開第2022/259446(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 18/2433
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
1つのスレッドを含む第1のスレッドと、複数のスレッドを含む第2のスレッドとが実行されるプロセスの管理を行うプロセス管理装置であって、
前記第2のスレッドに含まれる前記複数のスレッドの各々に通知された障害情報の回数を観測データとして取得するように構成された第1取得部と、
前記観測データに基づいて、前記第1のスレッドで障害が発生している条件のもと前記第2のスレッドに含まれる前記複数のスレッドの各々で前記障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定するように構成された設定部と、
設定された前記尤度関数の値に基づいて、前記第1のスレッドで障害が発生しているか否かを判定するように構成された判定部と、
前記判定部による判定結果を提示するように構成された提示部と
を備えるプロセス管理装置。
【請求項2】
請求項1に記載のプロセス管理装置において、
さらに、前記尤度関数を未知の入力として、学習済みの機械学習モデルに与え、前記学習済みの機械学習モデルの演算を行って、前記第1のスレッドで障害が発生したことを示す第1分類クラス、および前記第2のスレッドで障害が発生したことを示す第2分類クラスを含む分類クラスに分類するように構成された分類部を備え、
前記提示部は、前記分類部による分類結果を提示する
ことを特徴とするプロセス管理装置。
【請求項3】
請求項2に記載のプロセス管理装置において、
さらに、前記尤度関数と、前記判定結果によって示される前記分類クラスとが関連付けられた学習用データを取得するように構成された第2取得部と、
前記学習用データに基づいて、前記尤度関数と前記分類クラスとの関係を、機械学習モデルを用いて学習するように構成された学習部と、
前記学習部により構築された前記学習済みの機械学習モデルを記憶するように構成された記憶部と、
を備え、
前記分類部は、前記記憶部から前記学習済みの機械学習モデルを読み出して、前記学習済みの機械学習モデルの演算を行う
ことを特徴とするプロセス管理装置。
【請求項4】
1つのスレッドを含む第1のスレッドと、複数のスレッドを含む第2のスレッドとが実行されるプロセスの管理を行う
、コンピュータによって実行されるプロセス管理方法であって、
前記第2のスレッドに含まれる前記複数のスレッドの各々に通知された障害情報の回数を観測データとして取得する第1取得ステップと、
前記観測データに基づいて、前記第1のスレッドで障害が発生している条件のもと前記第2のスレッドに含まれる前記複数のスレッドの各々で前記障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定する設定ステップと、
設定された前記尤度関数の値に基づいて、前記第1のスレッドで障害が発生しているか否かを判定する判定ステップと、
前記判定ステップでの判定結果を提示する提示ステップと
を備えるプロセス管理方法。
【請求項5】
請求項4に記載のプロセス管理方法において、
さらに、前記尤度関数を未知の入力として、学習済みの機械学習モデルに与え、前記学習済みの機械学習モデルの演算を行って、前記第1のスレッドで障害が発生したことを示す第1分類クラス、および前記第2のスレッドで障害が発生したことを示す第2分類クラスを含む分類クラスに分類する分類ステップを備え、
前記提示ステップは、前記分類ステップでの分類結果を提示する
ことを特徴とするプロセス管理方法。
【請求項6】
請求項5に記載のプロセス管理方法において、
さらに、前記尤度関数と、前記判定結果によって示される前記分類クラスとが関連付けられた学習用データを取得する第2取得ステップと、
前記学習用データに基づいて、前記尤度関数と前記分類クラスとの関係を、機械学習モデルを用いて学習する学習ステップと、
前記学習ステップで構築された前記学習済みの機械学習モデルを記憶部に記憶する記憶ステップと、
を備え、
前記分類ステップは、前記記憶部から前記学習済みの機械学習モデルを読み出して、前記学習済みの機械学習モデルの演算を行う
ことを特徴とするプロセス管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセス管理装置およびプロセス管理方法に関する。
【背景技術】
【0002】
従来から、CPUの処理負荷を分散させるために、同一のプロセスでシングルスレッド処理およびマルチスレッド処理を実行するプログラムが用いられている。
【0003】
また、従来から、プログラムの実行単位であるプロセスにおいて、複数のスレッドが正常に稼働しているかを監視し、プロセスおよびスレッドが異常な状態に陥った場合は、この障害を検出する技術が知られている。例えば、特許文献1は、関数フックを利用した各スレッドの生存情報により、ソースコードの有無にかかわらず、各スレッドに対する障害の有無を監視する技術を開示している。
【0004】
しかし、特許文献1が開示する技術では、あるプロセスにおいて障害が発生した場合、複数のスレッドのうち障害が発生したスレッドを検出するが、マルチスレッド処理に係るスレッドで障害が発生したのか、あるいはシングルスレッド処理に係るスレッドで障害が発生したのかを特定することはできない。そのため、プロセス障害の解析が困難となる場合がある。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
このように、従来の技術によれば、マルチスレッド処理およびシングルスレッド処理が実行されるプロセスで障害が発生した場合、マルチスレッド処理およびシングルスレッド処理のどちらで障害が発生しているのかを容易に特定することが困難であった。
【0007】
本発明は、上述した課題を解決するためになされたものであり、マルチスレッド処理およびシングルスレッド処理が実行されるプロセスで障害が発生した場合、マルチスレッド処理およびシングルスレッド処理のどちらで障害が発生しているのかを容易に特定することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決するために、本発明に係るプロセス管理装置は、1つのスレッドを含む第1のスレッドと、複数のスレッドを含む第2のスレッドとが実行されるプロセスの管理を行うプロセス管理装置であって、前記第2のスレッドに含まれる前記複数のスレッドの各々に通知された障害情報の回数を観測データとして取得するように構成された第1取得部と、前記観測データに基づいて、前記第1のスレッドで障害が発生している条件のもと前記第2のスレッドに含まれる前記複数のスレッドの各々で前記障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定するように構成された設定部と、設定された前記尤度関数の値に基づいて、前記第1のスレッドで障害が発生しているか否かを判定するように構成された判定部と、前記判定部による判定結果を提示するように構成された提示部とを備える。
【0009】
また、本発明に係るプロセス管理装置において、さらに、前記尤度関数を未知の入力として、学習済みの機械学習モデルに与え、前記学習済みの機械学習モデルの演算を行って、前記第1のスレッドで障害が発生したことを示す第1分類クラス、および前記第2のスレッドで障害が発生したことを示す第2分類クラスを含む分類クラスに分類するように構成された分類部を備え、前記提示部は、前記分類部による分類結果を提示してもよい。
【0010】
上述した課題を解決するために、本発明に係るプロセス管理装置は、さらに、前記尤度関数と、前記判定結果によって示される前記分類クラスとが関連付けられた学習用データを取得するように構成された第2取得部と、前記学習用データに基づいて、前記尤度関数と前記分類クラスとの関係を、機械学習モデルを用いて学習するように構成された学習部と、前記学習部により構築された前記学習済みの機械学習モデルを記憶するように構成された記憶部と、を備え、前記分類部は、前記記憶部から前記学習済みの機械学習モデルを読み出して、前記学習済みの機械学習モデルの演算を行なってもよい。
【0011】
上述した課題を解決するために、本発明に係るプロセス管理方法は、1つのスレッドを含む第1のスレッドと、複数のスレッドを含む第2のスレッドとが実行されるプロセスの管理を行うプロセス管理方法であって、前記第2のスレッドに含まれる前記複数のスレッドの各々に通知された障害情報の回数を観測データとして取得する第1取得ステップと、前記観測データに基づいて、前記第1のスレッドで障害が発生している条件のもと前記第2のスレッドに含まれる前記複数のスレッドの各々で前記障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定する設定ステップと、設定された前記尤度関数の値に基づいて、前記第1のスレッドで障害が発生しているか否かを判定する判定ステップと、前記判定ステップでの判定結果を提示する提示ステップとを備える。
【0012】
また、本発明に係るプロセス管理方法において、さらに、前記尤度関数を未知の入力として、学習済みの機械学習モデルに与え、前記学習済みの機械学習モデルの演算を行って、前記第1のスレッドで障害が発生したことを示す第1分類クラス、および前記第2のスレッドで障害が発生したことを示す第2分類クラスを含む分類クラスに分類する分類ステップを備え、前記提示ステップは、前記分類ステップでの分類結果を提示してもよい。
【0013】
また、本発明に係るプロセス管理方法において、さらに、前記尤度関数と、前記判定結果によって示される前記分類クラスとが関連付けられた学習用データを取得する第2取得ステップと、前記学習用データに基づいて、前記尤度関数と前記分類クラスとの関係を、機械学習モデルを用いて学習する学習ステップと、前記学習ステップで構築された前記学習済みの機械学習モデルを記憶部に記憶する記憶ステップと、を備え、前記分類ステップは、前記記憶部から前記学習済みの機械学習モデルを読み出して、前記学習済みの機械学習モデルの演算を行ってもよい。
【発明の効果】
【0014】
本発明によれば、観測データに基づいて、第1のスレッドで障害が発生している条件のもと前記第2のスレッドに含まれる複数のスレッドの各々に障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定し、設定された尤度関数の値に基づいて、プロセス障害が、第1のスレッドで発生した障害に起因するか否かを判定する。そのため、マルチスレッド処理およびシングルスレッド処理が実行されるプロセスで障害が発生した場合、マルチスレッド処理およびシングルスレッド処理のどちらで障害が発生しているのかを容易に特定することができる。
【図面の簡単な説明】
【0015】
【
図1】
図1は、本発明の第1の実施の形態に係るプロセス管理装置を含むプロセス管理システムの構成を示すブロック図である。
【
図2】
図2は、第1の実施の形態に係るプロセス管理装置のハードウェア構成を示すブロック図である。
【
図3】
図3は、第1の実施の形態に係るプロセス管理装置の動作を示すフローチャートである。
【
図4】
図4は、第2の実施の形態に係るプロセス管理装置の構成を示すブロック図である。
【
図5】
図5は、第2の実施の形態に係るプロセス管理装置が備える学習部を説明するための図である。
【
図6】
図6は、第2の実施の形態に係るプロセス管理装置の動作を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、本発明の好適な実施の形態について、
図1から
図6を参照して詳細に説明する。
【0017】
[第1の実施の形態]
図1は、本発明の第1の実施の形態に係るプロセス管理装置1を備えるプロセス管理システムの構成を示すブロック図である。本実施の形態に係るプロセス管理システムは、1つのプロセスが、シングルスレッド処理を実行する1つのスレッド21bを含む第1のスレッドと、マルチスレッド処理を実行する複数のスレッド21aを含む第2のスレッドとを備える場合に、そのプロセスで発生した障害が、第1のスレッドで発生した障害であるのか、あるいは、第2のスレッドで発生した障害であるのかを特定する。
【0018】
[プロセス管理システムの構成]
図1に示すように、本実施の形態に係るプロセス管理システムは、プロセス管理装置1、および情報処理装置2を備える。プロセス管理装置1と情報処理装置2とは、例えば、バス101を介して接続されている。
【0019】
情報処理装置2は、CPU20、メモリ21、ストレージ22、通信インターフェース23、および入出力I/O24を備える。情報処理装置2で用いられるソフトウェアは、例えば、オペレーティングシステム(OS)上で動作するアプリケーションプログラムにより構成される。情報処理装置2では、OSがプロセス210と、プロセス210内の複数のスレッド21a、21bとを生成する。本実施の形態では、OSは、プロセス210内に、マルチスレッド処理を実行する複数のスレッド21a、およびシングルスレッド処理を実行するスレッド21bを生成する。また、本実施の形態では、マルチスレッド処理を実行する複数のスレッド21aは、n個(nは正の整数)生成される。
【0020】
ここで、プロセスはプログラムの実行単位であり、スレッドはCPUの割り当て実行単位である。1つのプロセスには、1以上のスレッドが含まれ、当該スレッドがCPUで実行される単位となる。したがって、ソフトウェアを構成する機能ブロックであるアプリケーションがプロセスに相当し、プロセス内の処理ブロックがスレッドに相当する。
【0021】
メモリ21は、OSおよびアプリケーションやサービスを構成するプロセス210が読み込まれCPU20によって実行される。また、メモリ21には、プロセス210で発生した障害情報を記録する障害ログ211が構成される。
【0022】
プロセス210は、1つのスレッド21bを含む第1のスレッドと、複数のスレッド21aを含む第2のスレッドとで構成される。第1のスレッドがシングルスレッド処理を実行し、第2のスレッドがマルチスレッド処理を実行する。
図1の例では、1つのプロセス210内で、シングルスレッド処理の第1のスレッドおよびマルチスレッド処理の第2のスレッドは、共有メモリや同じデータ構造にアクセスして連携する。
【0023】
例えば、情報処理装置2がWebサーバである場合、シングルスレッド処理を実行するスレッド21bは新しいリクエストを受け付けてリクエストの管理や基本的なリクエスト情報の処理などを行うことができる。さらに、マルチスレッド処理を実行する複数のスレッド21aは、図示されないシングルスレッド処理を実行するスレッド21cから渡されたリクエストに対して、それぞれ独立に処理を行い、異なるクライアントからのリクエストを同時に処理することができる。さらに、
図1に示すシングルスレッド処理を実行するスレッド21bでは、マルチスレッド処理に係る複数のスレッド21aが各リクエストの処理を終えた結果を、まとめてクライアントに応答することができる。
【0024】
本実施の形態では、プロセス210内のシングルスレッド処理を実行するスレッド21bまたはマルチスレッド処理を実行する複数のスレッド21aで発生した障害に起因したプロセス障害を管理対象とする。したがって、シングルスレッド処理のスレッド21bまたはマルチスレッド処理の複数のスレッド21aの異常動作等の障害に起因しないプロセス障害は管理の対象とされない。例えば、プロセス210における、ファイルの書き込みエラー、プロセス間の通信の問題等に起因するプロセス障害は管理の対象とされない。
【0025】
プロセス210で発生した障害情報は、障害ログ211に記録される。また、障害ログ211に記録されたプロセスの識別情報、プロセス障害の詳細やタイムスタンプを含む障害情報は、ストレージ22に記憶される。あるいは、プロセス210を監視する図示されない監視ツールやデバッグツールが、プロセス210を監視し、障害を検知した際に、通知を行うことができる。
【0026】
プロセス210内のスレッド21a、21bで発生する障害として、例えば、スレッド21a、21b内で発生した例外や、適切に例外処理がされない場合、および致命的なエラー発生によりスレッド21a、21bがクラッシュする場合などが含まれる。また、複数のスレッド21a、21b間で発生するデッドロックや、同時に共有データにアクセスすることで生ずるデータ競合、スレッド21a、21bのスケジューリングの問題などが挙げられる。
【0027】
プロセス210内のスレッド21a、21bのうち、例えば、スレッド21bで障害が発生すると、スレッド21bは、メッセージキューを介して障害情報をメッセージにして、キューを投入する。障害情報には、発生した障害に関する情報や発生元のスレッドを識別する情報を含まれる。また、障害が発生していない他のスレッド21aは、定期的に自己のメッセージキューを監視し、新しいメッセージとしてスレッド21bからの障害情報の通知が到着した場合には、取り出した障害情報のメッセージに応じた対処を実行する。さらに、スレッド21aが他のスレッド21bから障害情報をメッセージとして受けた場合には、障害ログ211において、障害情報の通知を受けたスレッド21aの識別情報、タイムスタンプ、およびメッセージの内容などを含むイベント情報が記録される。また、障害ログ211には、障害情報のメッセージを送ったスレッド21bの識別情報、タイムスタンプ、およびメッセージの内容等を含む情報が記録される。
【0028】
スレッド21a、21bに障害情報が通知されるといった場合には、スレッド21a、21bがメッセージキューを介して他のスレッドから障害情報のメッセージを受け取るイベントに加えて、エラーが発生したスレッド21a、21bが障害情報をメッセージとしてメッセージキューに挿入するイベントを含むことができる。すなわち、障害の発生に応じて障害情報のメッセージのやり取りが発生し、障害ログ211に記録されたスレッド21a、21bを識別できる情報と、障害情報のメッセージに関する情報と、タイムスタンプとが関連付けられた情報などによって、各スレッド21a、21bで障害情報の通知が発生したことが把握される。
【0029】
このように、本実施の形態では、プロセス210内で、マルチスレッド処理を実行する複数のスレッド21a、およびシングルスレッド処理を実行するスレッド21bに障害情報が通知され、プロセス障害が発生した場合、マルチスレッド処理に係る複数のスレッド21a側で発生した障害であるのか、あるいはシングルスレッド処理を実行するスレッド21bで発生した障害であるのかを特定する。
【0030】
[プロセス管理装置の機能ブロック]
プロセス管理装置1は、第1取得部10、設定部11、判定部12、第1記憶部13、および提示部14を備える。プロセス管理装置1は、1つのスレッド21bを含む第1のスレッドおよび複数のスレッド21aを含む第2のスレッドを備えるプロセス210の管理を行う。
【0031】
第1取得部10は、第2のスレッドに含まれる複数のスレッド21aの各々に通知された障害情報の回数を観測データとして取得する。具体的には、第1取得部10は、情報処理装置2の障害ログ211から、設定された期間においてマルチスレッド処理を実行する複数のスレッド21aの各々に通知された障害情報の回数を取得することができる。あるいは、第1取得部10は、情報処理装置2のストレージ22に格納された障害ログ211の情報を取得することができる。第1取得部10は、障害ログ211が記憶する、スレッド21aの識別情報と、障害情報のメッセージに関する情報と、タイムスタンプとが関連付けられた情報から、各スレッド21aに通知された障害情報の回数を取得することができる。
【0032】
例えば、1回の障害情報が1msにわたって通知される場合、第1取得部10は、設定された期間として、1000msの間に各スレッド21aで障害情報が何回通知されたかをカウントすることができる。
【0033】
第1取得部10は、さらに、設定された期間でスレッド21bに障害情報の通知が発生した回数を取得することができる。具体的には、第1取得部10は、障害ログ211に記憶されている、シングルスレッド処理を実行するスレッド21bの識別情報と、障害情報のメッセージに関する情報と、タイムスタンプとが関連付けられた情報から、設定された期間でスレッド21bに障害情報の通知が発生した回数を取得することができる。
【0034】
設定部11は、観測データに基づいて、第1のスレッドであるシングルスレッド処理のスレッド21bで障害が発生している条件のもとマルチスレッド処理の第2のスレッドに含まれる複数のスレッド21aの各々で障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定する。設定部11は、1~n個までのマルチスレッド処理に係る複数のスレッド21aの各々について、尤度関数P(Yi|X)=(障害情報の通知回数)/(設定された期間、例えば、1000ms)により求めることができる。上記(障害情報の通知回数)は、(障害情報の発生回数)×(障害情報の通知間隔)で計算される。例えば、1ms間隔の障害情報の通知が200回発生する場合、尤度関数P(Yi|X)は、(200×1ms)/(1000ms)で求められる。
【0035】
本実施の形態で用いるベイズ推定モデルは、シングルスレッド処理を行うスレッド21bで障害が発生している確率を事前分布P(X)とし、事前分布P(X)に対して尤度関数P(Yi|X)で更新した確率分布を事後分布P(X|Y)とする。事後分布P(X|Y)は、シングルスレッド処理を行うスレッド21bおよびマルチスレッド処理を行う複数のスレッド21aとの間で障害情報が通知されている条件のもと、シングルスレッド処理を行うスレッド21bで障害が発生している確率である。このように、ベイズ推定モデルは、ある条件における事象の確率を、既知の確率と観測データから求める確率モデルである。以下、ベイズ推定モデルのパラメータについて説明する。
【0036】
ベイズ推定モデルでは、まず、事象Xを、ある原因となった事象とする。また、事象Yを、原因により起きたと想定される事象とする。事象X、Yは確率変数として扱われる。具体的には、事象Xは、シングルスレッド処理を行うスレッド21bで障害が発生している事象、事象Yは、シングルスレッド処理を行うスレッド21bおよびマルチスレッド処理を行う複数のスレッド21aで障害情報が通知されている事象として定義される。
【0037】
本実施の形態では、事象Yは、特に、マルチスレッド処理を行うn個のスレッド21aの各々についての事象Y={Y1,Y2,…,Yn-1,Yn}として定義され、各スレッド21aで障害情報の通知が発生している事象が用いられる。
【0038】
事象Xが発生する確率分布P(X)を、観測データが与えられる前のパラメータの分布である事前分布として仮定することができる。また、事象Yが発生する確率分布P(Y)である、シングルスレッド処理を行うスレッド21bおよびマルチスレッド処理を行う複数のスレッド21aに障害情報が通知されている確率分布は、周辺尤度として表される。
【0039】
尤度関数P(Yi|X)は、観測データの表現方法であり、パラメータの値が条件付けされているときに、観測データYがどれだけモデルから発生しやすいかを表す。具体的には、シングルスレッド処理を行うスレッド21bで障害が発生している条件のもとマルチスレッド処理を行う複数のスレッド21aにおいて障害情報が通知される確率として表される。本実施の形態では、尤度関数P(Yi|X)は、第1取得部10によって取得された観測データに基づいて設定される。より詳細には、前述したように、マルチスレッド処理を行う複数のスレッド21aの各々について、(障害情報の通知回数)/(設定された期間、例えば、1000ms)により得られる値P(Yi|X)を尤度関数P(Y|X)として用いる。上記(障害情報の通知回数)は、障害情報の発生回数に障害情報の通知間隔(例えば、1ms)を掛けた値により求められる。
【0040】
ベイズ推定では、ベイズの定理を利用して、尤度関数、事前分布、および観測データから得られる情報を反映させ、事象Yが発生した条件のもと、事象Xが発生する確率である事後分布P(X|Y)を推定することができる。この場合、事後分布P(X|Y)は、マルチスレッド処理を行う複数のスレッド21aで障害情報が通知された条件のもと、シングルスレッド処理を行うスレッド21bで障害が発生している確率分布である。本実施の形態では、次式(1)のベイズの定理に基づいた、次式(2)で表されるベイズ推定式を用いる。
【0041】
【0042】
上式(1)の分母にP(Y)=ΣXP(Y|X)P(X)を代入すると、次式(2)で表される。
【0043】
【0044】
上式(1)のベイズの定理、および上式(2)のベイズ推定式では、一般に、訓練データのデータ数Nが十分に大きい場合(N→∞)には、尤度関数P(Y|X)が事前分布P(X)より支配的になる。すなわち、事後分布P(X|Y)と尤度関数P(Y|X)との関係は、次式(3)で表される。
P(X|Y)≒P(Y|X) ・・・(3)
【0045】
本実施の形態では、上式(1)のベイズの定理、および上式(2)のベイズ推定式に基づいた単純ベイズにより、尤度関数P(Y|X)が設定される。
【0046】
単純ベイズは、クラス分類の結果が確率として得られる生成モデルの一つである。単純ベイズでは、目的変数が与えられた際、説明変数間の条件付き独立を仮定する。具体的には、事後分布P(X|Y)である、事象Yの条件のもとの事象Xの確率分布において、Yは説明変数であり、Xはクラスを表す目的変数を示す。したがって、Yを入力すると各クラスXの確率として、シングルスレッド処理を行うスレッド21bで障害が発生している確率、および発生していない確率が出力される。
【0047】
本実施の形態では、上式(3)より、設定部11は尤度関数P(Y|X)の事象Xを説明変数、および事象Yを目的変数として考える。事象Yは、n個の多次元変数の集合であるY={Y1,Y2,…,Yn-1,Yn}で与えられ、各変数Yiは、y1,y2,…,yn-1,ynの値を持つ。すなわち、各変数Yiは、マルチスレッド処理を行う複数のスレッド21aの各々で障害情報が通知されていることを示す。前述したように、変数Yiは、それぞれ独立していると仮定され、尤度関数P(Y|X)は次式(4)の確率の積で表すことができる。
【0048】
【0049】
判定部12は、設定部11により設定された尤度関数P(Y|X)の値に基づいて、シングルスレッド処理を行うスレッド21bでの障害の発生の有無を判定する。判定部12は、事前に設定されたしきい値を用いて、スレッド21bでの障害の発生の有無を判定することができる。しきい値は、任意の値(例えば、n個のマルチスレッド処理に係るスレッド21aの場合に、0.8n)を設定することができる。この場合、判定部12は、尤度関数P(Y|X)の値が設定されたしきい値を超えた場合に、シングルスレッド処理のスレッド21bで障害が発生したと判定する。しきい値を超えない場合には、判定部12は、マルチスレッド処理側の複数のスレッド21aで障害が発生したと判定することができる。なお、しきい値は、例えば、別途行われる障害ログの解析で特定された実際の障害発生箇所に基づいて、値を調整することができる。
【0050】
第1記憶部13は、上式(1)から(4)のベイズ推定モデルを記憶する。
【0051】
提示部14は、判定部12による判定結果を提示する。提示部14は、例えば、図示されないネットワークを介して外部のサーバに判定結果を提示することができる。また、提示部14は、判定結果を表示装置107に出力させることができる。
【0052】
[プロセス管理装置のハードウェア構成]
次に、上述した機能を有するプロセス管理装置1を実現するハードウェア構成の一例について、
図2を用いて説明する。
【0053】
図2に示すように、プロセス管理装置1は、例えば、バス101を介して接続されるプロセッサ102、主記憶装置103、通信インターフェース104、補助記憶装置105、入出力I/O106を備えるコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。また、プロセス管理装置1は、バス101を介して接続される表示装置107を備えることができる。
【0054】
主記憶装置103には、プロセッサ102が各種制御や演算を行うためのプログラムが予め格納されている。プロセッサ102と主記憶装置103とによって、
図1に示した第1取得部10、設定部11、判定部12などプロセス管理装置1の各機能が実現される。
【0055】
通信インターフェース104は、プロセス管理装置1と各種外部電子機器との間をネットワーク接続するためのインターフェース回路である。
【0056】
補助記憶装置105は、読み書き可能な記憶媒体と、その記憶媒体に対してプログラムやデータなどの各種情報を読み書きするための駆動装置とで構成されている。補助記憶装置105には、記憶媒体としてハードディスクやフラッシュメモリなどの半導体メモリを使用することができる。
【0057】
補助記憶装置105は、プロセス管理装置1が実行するベイズ推定プログラムを格納するプログラム格納領域を有する。補助記憶装置105によって、
図1で説明した第1記憶部13が実現される。さらには、例えば、上述したデータやプログラムなどをバックアップするためのバックアップ領域などを有していてもよい。
【0058】
入出力I/O106は、外部機器からの信号を入力したり、外部機器へ信号を出力したりする入出力装置である。
【0059】
表示装置107は、有機ELディスプレイや液晶ディスプレイなどによって構成され、提示部14を実現する。
【0060】
なお、プロセス管理装置1は、情報処理装置2と一体的な構成とすることができる。この場合、プロセス管理装置1は、プロセッサ102、主記憶装置103、通信インターフェース104、補助記憶装置105、および入出力I/O106を、情報処理装置2と共有する。
【0061】
[プロセス管理装置の動作]
次に、上述した構成を有するプロセス管理装置1の動作を、
図3のフローチャートを参照して説明する。以下では、情報処理装置2のプロセス210において、シングルスレッド処理を行うスレッド21bおよびマルチスレッド処理を行う複数のスレッド21aで障害情報が通知され、プロセス障害が発生しているものとする。
【0062】
まず、第1取得部10は、情報処理装置2の障害ログ211から、マルチスレッド処理を行う複数のスレッド21aの各々に通知された障害情報の回数を観測データとして取得する(ステップS1)。第1取得部10は、情報処理装置2から、設定された期間にn個のスレッド21aの各々に通知された障害情報の回数を取得することができる。
【0063】
次に、設定部11は、ステップS1で取得された観測データに基づいて、シングルスレッド処理を行うスレッド21bで障害が発生している条件のもとマルチスレッド処理を行う複数のスレッド21aにおいて障害情報が通知される確率を、ベイズ推定モデルの尤度関数P(Y|X)として設定する(ステップS2)。本実施の形態では、設定部11は、ステップS1で取得された観測データに基づいて、マルチスレッド処理を行う複数のスレッド21aの各々について、(障害情報の通知回数)/(設定された期間、例えば、1000ms)により得られる値P(Yi|X)を尤度関数P(Y|X)として設定する。1ms間隔で障害情報が通知され、200回の障害情報が発生する場合、上記の(障害情報の通知回数)は200回×1msとなる。さらに、この場合、尤度関数P(Y|X)は、200×1ms/1000msで求められる。
【0064】
ベイズ推定モデルは、シングルスレッド処理を行うスレッド21bで障害が発生している確率を事前分布P(X)とし、事前分布P(X)に対して尤度関数P(Yi|X)で更新した事後分布P(X|Y)を、シングルスレッド処理のスレッド21bで障害が発生している条件のもとマルチスレッド処理の複数のスレッド21aの各々で障害情報が通知される確率として定義する。
【0065】
設定部11は、上式(2)のベイズ推定式に基づいた単純ベイズ、および上式(3)の近似関係P(X|Y)≒P(Y|X)より、尤度関数P(Y|X)の事象Xを説明変数、および事象Y={Y1,Y2,…,Yn-1,Yn}を目的変数として考える。各変数Yiは、マルチスレッド処理の各スレッド21aで障害情報が通知されていることを示す。
【0066】
設定部11は、変数Yiがそれぞれ独立しているとの仮定から、上式(4)の確率の積で表された尤度関数P(Y|X)に、マルチスレッド処理の、1~n個までのスレッド21aの各々に対応する尤度関数P(Yi|X)の値を代入する。
【0067】
次に、判定部12は、ステップS2で設定された尤度関数P(Y|X)の値が、事前に設定されたしきい値を超えた場合に、シングルスレッド処理のスレッド21bで障害が発生したと判定し、しきい値を超えない場合には、マルチスレッド処理の複数のスレッド21a側で障害が発生したと判定する(ステップS3)。判定部12が判定処理で用いるしきい値は、例えば、後日別途に行われる、実際の障害ログの解析結果により特定された障害発生箇所の情報に基づいて調整することができる。
【0068】
その後、提示部14は、ステップS3での判定結果を提示する(ステップS4)。例えば、提示部14は、図示されないネットワークを介して、外部のサーバ等に判定結果が示す、障害発生箇所の情報を送出することができる。
【0069】
以上説明したように、第1の実施の形態に係るプロセス管理装置1によれば、観測データに基づいて、シングルスレッド処理のスレッド21bで障害が発生している条件のもとマルチスレッド処理の複数のスレッド21aで障害情報が通知されている確率を、ベイズ推定モデルの尤度関数P(Y|X)として設定し、設定された尤度関数P(Y|X)に基づいてシングルスレッド処理のスレッド21bで障害が発生しているか否かを判定する。そのため、マルチスレッド処理およびシングルスレッド処理が実行されるプロセスで障害が発生した場合、シングルスレッド処理において障害が発生しているのかを特定することができる。
【0070】
[第2の実施の形態]
次に、本発明の第2の実施の形態について説明する。なお、以下の説明では、上述した第1の実施の形態と同じ構成については同一の符号を付し、その説明を省略する。
【0071】
第1の実施の形態では、単純ベイズに基づいて、観測データから設定された尤度関数P(Y|X)に基づいてシングルスレッド処理のスレッド21bでの障害の発生の有無を判定する場合について説明した。これに対して、第2の実施の形態では、判定部12による判定結果を学習用データとして用いて機械学習モデルを学習させた学習済みの機械学習モデルを用いて、シングルスレッド処理のスレッド21b、およびマルチスレッド処理のスレッド21aのどちらで障害が発生したのかを分類する。
【0072】
[プロセス管理装置の機能ブロック]
図4は、本実施の形態に係るプロセス管理装置1Aの構成を示すブロック図である。プロセス管理装置1Aは、第1学習装置1-1および第2学習装置1-2を備える。第1学習装置1-1は、第1取得部10、設定部11、判定部12、第1記憶部13、および提示部14を備える。第1学習装置1-1は、第1の実施の形態に係るプロセス管理装置1の機能ブロックに対応する。第2学習装置1-2は、第2記憶部15(記憶部)、第2取得部16、学習部17、および分類部18を備える。本実施の形態は第2学習装置1-2を備える点で第1の実施の形態とは構成が異なる。以下、第1の実施の形態と異なる構成を中心に説明する。
【0073】
第2記憶部15は、尤度関数P(Y|X)と、判定部12による判定結果によって示される分類クラスとを関連付けた学習用データを記憶する。尤度関数P(Y|X)は、設定部11が設定した、観測データに基づいてシングルスレッド処理のスレッド21bで障害が発生している条件のもと、マルチスレッド処理の複数のスレッド21aで障害情報が通知されている確率である。
【0074】
本実施の形態では、マルチスレッド処理の1~n個までのスレッド21aの各々について、(障害情報の通知回数)/(設定された期間、例えば、1000ms)により得られる値P(Yi|X)を尤度関数P(Y|X)として用いる。より詳細には、1ms間隔で障害情報が通知される場合、上記(障害情報の通知回数)は、(障害情報の発生回数)×(通知間隔の1ms)により求められる。例えば、1000ms間隔で200回の障害情報が発生した場合、200×1ms/1000msが尤度関数P(Y|X)の値となる。
【0075】
第2記憶部15が尤度関数P(Yi|X)と関連付けて記憶する分類クラスは、第1学習装置1-1が備える判定部12の判定結果、すなわちシングルスレッド処理のスレッド21bでの障害の発生、およびマルチスレッド処理の複数のスレッド21a側での障害の発生をそれぞれ第1分類クラス、および第2分類クラスとした分類クラスである。分類クラスは、尤度関数P(Yi|X)に対して与えられる正解ラベルである。
【0076】
なお、第2記憶部15は、判定部12による判定結果が、実際の障害発生箇所と異なる場合には、正しい障害発生箇所を示す正解ラベルを尤度関数P(Yi|X)に付した学習用データを記憶する。例えば、判定部12による判定結果としてシングルスレッド処理のスレッド21bで障害が発生しているという結果が得られた後に、別途、障害ログの解析が行われ、実際の障害発生箇所がマルチスレッド処理の複数のスレッド21a側であったことが判明したとする。この場合、第2記憶部15は、尤度関数P(Yi|X)に対して、第1分類クラスではなく、第2分類クラスを正解ラベルとして付与した学習用データを記憶する。
【0077】
第2取得部16は、尤度関数P(Yi|X)と分類クラスとが関連付けられている学習用データを第2記憶部15から取得する。より具体的には、第2取得部16は、第2記憶部15に一定数の学習用データが蓄積された場合に、学習用データを取得する構成とすることができる。また、第2取得部16は、学習済み機械学習モデルを用いた推論処理で用いる未知の入力を取得する。具体的には、第2取得部16は、第1学習装置1-1が備える設定部11が設定した、マルチスレッド処理のn個のスレッド21aの各々に対応する尤度関数P(Yi|X)を、未知の入力として取得することができる。
【0078】
学習部17は、学習用データに基づいて、尤度関数P(Y
i|X)と分類クラスとの関係を機械学習モデルにより学習する。
図5は、本実施の形態における機械学習モデルとして用いるニューラルネットワークの構造を示す模式図である。ニューラルネットワークは、入力層x、隠れ層h、出力層yからなる多層構造を用いることができる。入力層xの各入力ノードには、第1学習装置1-1の設定部11によって設定された尤度関数P(Y
i|X)が与えられる。入力層xへ与えらえる入力信号は、マルチスレッド処理のn個のスレッド21aの各々に対応する尤度関数P(Y
1|X),P(Y
2|X),・・・,P(Y
n-1|X),P(Y
n|X)の値である。
【0079】
図5に示すニューラルネットワークは、入力層xに与えられた、マルチスレッド処理のn個のスレッド21aの各々に対応する尤度関数P(Y
i|X)に対して、入力の重み付け総和に活性化関数を適用し、しきい値処理により決定された出力を出力層yに渡す。
図5に示すように、入力ノードの数は、マルチスレッド処理を行うスレッド21aの数に対応するn個が設けられる。
【0080】
出力層yの各出力ノードは、第1分類クラスおよび第2分類クラスからなる二値分類のクラスを示す。出力層yは、各クラスに属する確率を出力することができる。
図5の例に示すように、第1分類クラスとして「シングルスレッド処理のスレッド21bで障害が発生」、および第2分類クラスとして「マルチスレッド処理の複数のスレッド21aで障害が発生」とすることができる。
【0081】
学習部17は、マルチスレッド処理の各スレッド21aに対応する尤度関数P(Yi|X)が入力として与えられた時の出力が、学習用データのラベルに示される分類クラスの値となるように、ノード間の結線の重みwを調整する。学習部17は、例えば、誤差逆伝搬などを利用して、与えた入力値に対して、得られた出力値を比較し、それぞれの重みwの誤差を調べて逆方向に伝搬していき、最終的に重みwなどのパラメータを決定することができる。このような学習処理を経て、学習部17は、学習済みのニューラルネットワークを構築する。
【0082】
学習部17によって構築された学習済みのニューラルネットワークは、第2記憶部15に記憶される。
【0083】
図4に戻り、分類部18は、尤度関数P(Y
i|X)を未知の入力として学習済みの機械学習モデルに与え、学習済みの機械学習モデルの演算を行って、第1分類クラスおよび第2分類クラスを含む分類クラスに分類する。分類部18は、第2取得部16が取得した尤度関数P(Y
i|X)を未知の入力として学習済みの機械学習モデルに与える。尤度関数P(Y
i|X)は、ベイズ推定モデルを用いた学習を行う第1学習装置1-1の設定部11によって設定された確率分布である。また、第1分類クラスは、シングルスレッド処理のスレッド21bで障害が発生したことを示し、第2分類クラスは、マルチスレッド処理の複数のスレッド21aのいずれかで障害が発生したことを示す。
【0084】
分類部18は、未知の入力に対して、学習済みの重みwなどのパラメータの積和演算および活性化関数によるしきい値処理を行って分類結果を出力する。分類部18による分類結果は、提示部14によって提示される。分類結果は、図示されないネットワークを介して外部のサーバ等に送出することができる。
【0085】
[プロセス管理装置の動作]
上述した構成を有するプロセス管理装置1Aの動作について、
図6のフローチャートを参照して説明する。
図6に示すステップS1からステップS4までの処理は、第1学習装置1-1によって実行され、第1の実施の形態で説明したプロセス管理装置1の動作に係る処理と同様である。以下、ステップS10以降の処理について説明する。
【0086】
ステップS4での判定処理の後、第2記憶部15は、尤度関数P(Yi|X)に分類クラスを関連付けた学習用データを記憶する(ステップS10)。学習用データを構成する尤度関数P(Yi|X)はステップS2で設定された値であり、分類クラスはステップS4の判定結果に対応する値である。より詳細には、学習用データは、マルチスレッド処理のn個のスレッド21aの各々に対応する尤度関数P(Yi|X)に対して、ステップS4での判定結果が示す分類クラスを正解ラベルとして付したデータである。
【0087】
なお、ステップS10で記憶される学習用データの分類クラスは、ステップS4での判定結果に対して、別途行われる障害ログの詳細な解析結果により、正しい障害発生箇所に対応する分類クラスが反映された値である。次に、第2取得部16は、設定された数の学習用データが第2記憶部15に蓄積された場合(ステップS11:YES)、第2記憶部15から学習用データを取得する(ステップS12)。
【0088】
一方、ステップS10において第2記憶部15に設定された数の学習用データが蓄積されていない場合(ステップS11:NO)、ステップS1からステップS4までの処理が繰り返される。その後、学習部17は、ステップS12で取得した学習用データを用いて、尤度関数P(Yi|X)と分類クラスとの関係を、機械学習モデルを用いて学習する(ステップS13)。ステップS13で構築された学習済みの機械学習モデルは、第2記憶部15に記憶される。
【0089】
次に、分類部18は、ステップS13で構築された学習済みの機械学習モデルを第2記憶部15から読み出して、分類処理を行う(ステップS14)。分類部18は、第2取得部16が取得した尤度関数P(Yi|X)を未知の入力として学習済みの機械学習モデルに与え、学習済みの機械学習モデルの演算を行って分類クラスを出力する。
【0090】
その後、提示部14は、ステップS14で得られた分類結果を提示する(ステップS15)。例えば、提示部14は、図示されないネットワークを介して外部のサーバに分類結果を送出することができる。分類結果は、未知の入力に対する分類クラスを示す。具体的には、シングルスレッド処理のスレッド21bおよびマルチスレッド処理の複数のスレッド21bに障害情報が通知された場合に、シングルスレッド処理のスレッド21bで障害が発生したことを示す第1分類クラスに属するか、あるいは、マルチスレッド処理の複数のスレッド21a側で障害が発生したことを示す第2分類クラスに属するのかが示される。
【0091】
以上説明したように、第2の実施の形態に係るプロセス管理装置1Aによれば、第1学習装置1-1で得られた判定結果を学習用データとして用いて、第2学習装置1-2が尤度関数P(Yi|X)と分類クラスとの関係を学習した学習済み機械学習モデルを構築する。したがって、例えば、サービス開始からの経過時間が比較的短いような場合において、少ない観測データしか取得できない場合には、ベイズ推定モデルを利用した判定処理を行うことができる。一方において、一定数以上の学習用データが蓄積された場合には、教師あり学習を行う機械学習モデルを学習して分類処理を行うことができる。そのため、サービスの開始から時間の経過に沿って適した学習処理を行うことができる。さらには、より精度の高い分類処理によってマルチスレッド処理およびシングルスレッド処理を含むプロセス210のプロセス障害が発生した際に、障害発生箇所を容易に特定することができる。
【0092】
なお、上述の実施の形態では、第1学習装置1-1と第2学習装置1-2とが同じ装置に設けられている構成を例示した。しかし、第1学習装置1-1と第2学習装置1-2とは、それぞれ別個の装置として構成することができる。この場合、第1学習装置1-1、および第2学習装置1-2はそれぞれ
図2で説明したハードウェア構成を有することができる。
【0093】
また、上述の実施の形態では、情報処理装置2がWebサーバであり、マルチスレッド処理とシングルスレッド処理とを含むプロセスを実行するプログラムで発生した障害の発生箇所がマルチスレッド処理側であるかシングルスレッド処理側であるかを特定する場合を例に挙げて説明した。しかし、情報処理装置2が実行するプログラムは、1つのプロセスでマルチスレッド処理とシングルスレッド処理とが組み合わされたものであれば、例えば、複数のクエリやトランザクションを処理するデータベースサーバや、ユーザからのリクエストを処理するアプリケーションサーバやミドルウェアなどが含まれる。その他にも、リアルタイム処理が求められる組込みシステムや産業制御システムの処理プログラムが含まれる。さらには、5Gなどの通信規格のコアネットワーク内に設けられて通信制御を行うコアネットワーク装置の通信制御プログラムに適用される。
【0094】
また、上述した実施の形態では、機械学習モデルとして、入力層、隠れ層、および出力層からなるニューラルネットワークを例示した。ニューラルネットワークは、教師あり学習により分類問題を扱うモデルであれば、例えば、隠れ層を多層化した深層学習モデルとすることができる。その他にも、機械学習モデルとして、SVM、決定木、ランダムフォレスト、ロジスティック回帰などを用いることができる。
【0095】
以上、本発明のプロセス管理装置およびプロセス管理方法における実施の形態について説明したが、本発明は説明した実施の形態に限定されるものではなく、請求項に記載した発明の範囲において当業者が想定し得る各種の変形を行うことが可能である。
【符号の説明】
【0096】
1、1A…プロセス管理装置、1-1…第1学習装置、1-2…第2学習装置、10…第1取得部、11…設定部、12…判定部、13…第1記憶部、14…提示部、15…第2記憶部、16…第2取得部、17…学習部、18…分類部、2…情報処理装置、20…CPU、21…メモリ、210…プロセス、21a、21b…スレッド、211…障害ログ、22…ストレージ、101…バス、102…プロセッサ、103…主記憶装置、23、104…通信インターフェース、105…補助記憶装置、24、106…入出力I/O、107…表示装置。
【要約】
【課題】マルチスレッド処理およびシングルスレッド処理が実行されるプロセスで障害が発生した場合、マルチスレッド処理およびシングルスレッド処理のどちらで障害が発生しているのかを容易に特定することを目的とする。
【解決手段】
プロセス管理装置1は、第2のスレッドに含まれる複数のスレッド21aの各々に通知された障害情報の回数を観測データとして取得する第1取得部10と、観測データに基づいて、第1のスレッドで障害が発生している条件のもと第2のスレッドに含まれる複数のスレッド21aの各々で障害情報が通知される確率を、ベイズ推定モデルの尤度関数として設定する設定部11と、設定された尤度関数の値に基づいて、第1のスレッドで障害が発生しているか否かを判定する判定部12と、判定部12による判定結果を提示する提示部14とを備える。
【選択図】
図1