JP2008251038A - 情報処理装置におけるプログラム制御方法、情報処理装置、及びプログラム - Google Patents

情報処理装置におけるプログラム制御方法、情報処理装置、及びプログラム Download PDF

Info

Publication number
JP2008251038A
JP2008251038A JP2008144669A JP2008144669A JP2008251038A JP 2008251038 A JP2008251038 A JP 2008251038A JP 2008144669 A JP2008144669 A JP 2008144669A JP 2008144669 A JP2008144669 A JP 2008144669A JP 2008251038 A JP2008251038 A JP 2008251038A
Authority
JP
Japan
Prior art keywords
thread
execution
processing
information
executed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2008144669A
Other languages
English (en)
Other versions
JP4327226B2 (ja
Inventor
Kyohei Nagano
京平 長野
Mutsuko Kondo
睦子 近藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008144669A priority Critical patent/JP4327226B2/ja
Publication of JP2008251038A publication Critical patent/JP2008251038A/ja
Application granted granted Critical
Publication of JP4327226B2 publication Critical patent/JP4327226B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】 処理の整合性を確保することができるようにする。
【解決手段】 メソッドを実行する第1及び第2のスレッドを実行する情報処理装置において、第1のスレッドが第2のスレッドの実行中止命令を前記第2のスレッドに送信する。第2のスレッドは、実行中止命令の受信に応じて、実行中の第1のメソッドの実行を中止するとともに、第1のメソッドの次に実行すべき第2のメソッドの実行を開始する。
【選択図】 図1

Description

本発明は、情報処理装置におけるプログラム制御方法、情報処理装置、及びプログラムに関する。
複数のスレッドを並列処理する仕組みにおいて、あるスレッドの処理負荷が大きくなり過ぎると、そのスレッドをスレッド単位で強制終了する仕組みが知られている(例えば特許文献1を参照)。
特開2001−125800号公報
上記のスレッド単位で強制終了する仕組みでは、例えば強制終了の原因となったメソッドにより共有資源に対するロックが取得され、そのメソッドに後続するメソッドにより前記ロックの解除がなされる場合には、後続するメソッドが実行される前にスレッドが終了してしまい、ロックが解除されず、処理の整合性が確保できなくなってしまうという問題がある。
本発明は、このような問題に鑑みてなされたものであり、スレッド単位での処理の整合性を確保することができる、情報処理装置におけるプログラム制御方法、情報処理装置、及びプログラムを提供することを目的とする。
上記課題を解決するための本発明の主たる発明は、メソッドを実行する第1及び第2のスレッドを実行する情報処理装置におけるメソッドの処理方法であって、前記第1のスレッドが前記第2のスレッドの実行中止命令を前記第2のスレッドに送信するステップと、前記第2のスレッドが、前記実行中止命令の受信に応じて、実行中の第1のメソッドの実行を中止するとともに、前記第1のメソッドの次に実行すべき第2のメソッドの実行を開始するステップと、を含むこととする。
本発明によれば、処理の整合性を確保することができる。
図1に本実施形態に係る情報処理システム1の全体構成を示している。情報処理システム1は、クライアント装置10とサーバ装置20を含んで構成されている。クライアント装置10とサーバ装置20とは、通信ネットワーク30を介して互いに通信可能に接続している。通信ネットワーク30は、例えばインターネットやLAN(Local Area Network)、無線ネットワーク、公衆電話回線、携帯電話回線網である。
クライアント装置(端末)10は、例えばパーソナルコンピュータやワークステーションなどである。クライアント装置10では、Webブラウザが動作している。サーバ装置20では例えばオンライン書店などのWebサービスが提供されており、利用者はクライアント装置10で動作するWebブラウザを操作してサーバ装置20にアクセスする。
サーバ装置20(情報処理装置)は、例えば、パーソナルコンピュータや、ワークステーションである。サーバ装置20では、特定のURL(Uniform Resource Locator)に対するリクエストに応じて動的なWebページや画像などを提供するサーバサイドJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)によるアプリケーションサーバが動作している。
アプリケーションサーバは、データベースに対する接続機能や、複数の処理を連結するトランザクション管理機能などを提供する機能(以下、コンテナという。)が実現されている。コンテナは、Java(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)言語により記述されたプログラムを実行する。これによりアプリケーションサーバにおける各種の処理が実現される。具体的なコンテナとしては、例えばサーブレットコンテナやEJB(Enterprise JavaBeans;サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)コンテナがある。
アプリケーションサーバでは、複数のスレッドが実行されている。関数型又は手続型の言語によりアプリケーションサーバを実現するプログラムが記述される場合には、スレッドは、オペレーティングシステムが管理する処理単位であるプロセスである。スレッドの具体例として、例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)の仮想マシンにおける処理単位としてのスレッドがある。スレッドは一連の手続を実行する。この手続きは、例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)のクラスから生成されるオブジェクトのメソッドであり、プログラムである。以下、スレッドにおいて実行される手続であるオブジェクトのメソッド及びプログラムを総称してメソッドと称する。
図2にサーバ装置20のハードウェア構成を示している。同図に示すように、サーバ装置20は、CPU201、メモリ202、記憶装置203、記憶媒体読取装置204、通信インタフェース205を備えている。
記憶装置203は、例えば、ハードディスクやフラッシュメモリなどである。記憶装置203にはプログラムやデータが記憶されている。記録媒体読取装置204は、記録媒体206に記憶されているプログラムやデータを読み出して、メモリ202や記憶装置203に格納する。記録媒体読取装置204は、例えば、CD−ROMドライブやDVD−ROMドライブ、磁気テープドライブ、メモリカードリーダなどである。記録媒体206としては、例えば、CD−ROMやDVD−ROM、磁気テープ、ハードディスク、フラッシュメモリなどである。CPU201は、サーバ装置20の全体の制御を司り、記憶装置203に記憶されているプログラムをメモリ202に読み出して実行することにより各種の機能を実現する。通信インタフェース205は、通信ネットワーク30に接続するためのインタフェースである。通信インタフェース205としては、例えば、公衆電話回線に接続するモデムや、イーサネット(登録商標)アダプタなどがある。
なお、サーバ装置20は、複数のCPU201を備えるものでもよいし、複数台のコンピュータを接続したクラスタシステムによって実現されていてもよい。
図3にサーバ装置20において実現されている機能を示している。同図に示すように、サーバ装置20では、ユーザプログラム実行部211、メソッド中止処理部212、監視部213、コマンド受付部214、保護対象設定情報読込部215、ログ書き出し部216、最大実行時間読込部217、メソッド処理情報記憶部251、最大実行時間記憶部252、スレッド情報記憶部253、保護対象クラス記憶部254、保護対象処理条件記憶部255、中止対象キュー256が実現されている。
メソッド処理情報記憶部251は、Java(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)の仮想マシンにおいて実行されているスレッド毎に、そのスレッドで実行されているメソッドの処理に関する情報を記憶する。図4にメソッド処理情報記憶部251の構成を示している。同図に示すように、メソッド処理情報記憶部251は、各スレッドを特定する情報(以下、スレッドIDという。)に対応付けて、そのスレッドにおいて呼び出されたメソッドに関する情報(以下、メソッド情報という。)のリスト、排他ロックが取得されているオブジェクトを特定するオブジェクトIDのリスト(以下、ロック情報という。)、トランザクション処理が開始されたデータベースを特定するデータベース名のリスト(以下、トランザクション情報という。)を記憶している。例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)では、仮想マシンにおいて排他ロックが取得されたオブジェクトが管理されており、その管理対象となるオブジェクトのIDのリストが上記ロック情報となる。また、メソッド情報のリストは仮想マシンによって管理されているコールスタックである。トランザクション情報は、コンテナによって管理される。コンテナによってデータベースに対するトランザクションが開始されたときには、そのデータベース名がトランザクション情報に登録され、トランザクションがコミット又はロールバックされたときには、そのデータベース名がトランザクション情報から削除される。サーバ装置20の各機能部は、メソッド処理情報記憶部251を参照することにより、仮想マシンにおいて実行されている各スレッドについて、実行されている一連のメソッドに関するメソッド情報をコールスタックから取得し、現在排他ロックが取得されているかどうかをロック情報から判断し、トランザクション処理が開始されているかどうかをトランザクション情報から判断することができる。
最大実行時間記憶部252は、スレッドにおいて実行されるメソッドを特定する情報と、そのメソッドの最大実行時間とを対応付けて記憶する。図5に最大実行時間記憶部252の構成を示す。図5に示すように、最大実行時間記憶部252には、クラス名やメソッド名などに対する条件と、その条件に合致するメソッドが仮想マシン上で実行される実行時間の最大値(以下、最大実行時間という。)が設定される。最大実行時間には、例えば、秒単位の値が設定される。
最大実行時間読込部217は、設定ファイルからメソッドに対する条件や最大実行時間を読み込んで、最大実行時間記憶部252に設定する。
スレッド情報記憶部253(本発明の「実行開始時刻記憶部」に該当する。)は、スレッドの状態や、そのスレッドにおいて実行されているメソッドのメソッド情報を記憶する。図6にスレッド情報記憶部253の構成を示している。同図に示すように、スレッド情報記憶部253には、スレッドIDに対応付けて、スレッドの状態が記憶され、スレッドにおいて実行されているメソッドのそれぞれについて、メソッド名、メソッドの実行が開始された時刻、及びそのメソッドに設定された最大実行時間が記憶されている。スレッドの状態には、スレッドが通常実行されている状態を示す「実行中」、スレッドにおいて実行中のメソッドがタイムアウトしたことを示す「タイムアウト」、後述するメソッドの中止処理が実行中であることを示す「中止処理中」、メソッドの中止処理が完了したことを示す「中止完了」などがある。
ユーザプログラム実行部211は、アプリケーションサーバにおけるコンテナ機能を提供する。また、ユーザプログラム実行部211は、ユーザが記述したプログラム(以下、ユーザプログラムという。)のクラスからオブジェクトを生成したり、生成されたオブジェクトのメソッドを呼び出したりすることにより、ユーザプログラムを実行する。また、ユーザプログラム実行部211をJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)クラスとして提供し、例えば、ユーザ定義のクラスの継承元となる基礎クラスとすることもできる。
監視部213は、仮想マシンにおいて実行されているスレッドのそれぞれについて、そのスレッドにおいて実行されているメソッドの実行時間が、最大実行時間記憶部252に記憶されている最大実行時間を超えていないかどうかを調べることにより、実行中のメソッドのタイムアウトを検出するタイムアウト監視処理を行う。監視部213は、独立したスレッドでタイムアウト監視処理を行い、他のスレッドにおいて実行されているメソッドのタイムアウトを検出する。なお、タイムアウト監視処理の詳細については後述する。
コマンド受付部214は、利用者から、指定されたスレッドにおいて実行中のメソッドの実行を中止させる処理(以下、メソッド中止処理という。)を行うように指示するコマンド(以下、メソッド中止コマンドという。)の入力を受け付ける。メソッド中止コマンドには、利用者から指定されるスレッドIDが設定される。なお、コマンド受付部214は、例えば、キーボードやマウスなどの入力装置からメソッド中止コマンドを受け付けるようにしてもよいし、メソッド中止コマンドを含むリクエストをクライアント装置10から受信するようにしてもよい。
中止対象キュー256は、後述のメソッド中止処理部212によるメソッド中止処理の対象となるスレッドを特定するスレッドIDが登録されるキューである。監視部213は、他のスレッドにおいて実行されているメソッドのタイムアウトを検出すると、検出したメソッドが実行されているスレッドのスレッドIDを中止対象キュー256に登録する。また、コマンド受付部214は、メソッド中止コマンドの受付に応じて、メソッド中止コマンドに設定されているスレッドIDを中止対象キュー256に登録する。
メソッド中止処理部212は、中止対象キュー256に登録されているスレッドIDが示すスレッドにおいて実行されているメソッドを対象としてメソッド中止処理を行う。なお、メソッド中止処理の詳細については後述する。
保護対象クラス記憶部254及び保護対象処理条件記憶部255(本発明の「保護メソッド記憶部」に該当する。)には、メソッド中止処理部212によるメソッド中止処理の対象としない(中止すべきでない)メソッドを特定する情報が記憶される。図7に保護対象クラス記憶部254の一例を示す。同図において、保護対象クラス記憶部254には、Java(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)クラスのパッケージ名やクラス名に対する条件が設定されている。図8は保護対象処理条件記憶部255の一例である。同図において、保護対象処理条件記憶部255には、メソッドにおいて行われる処理に対する条件が設定されている。保護対象処理条件記憶部255に指定される条件の対象となるメソッドの処理とは、メソッド処理情報記憶部251に記憶されているコールスタックやロック情報、トランザクション情報から取得可能なものである。上記の条件としては、例えば、特定のメソッドが呼び出されていることや、特定のオブジェクトに対してロックが取得されていること、特定のデータベースに対してトランザクション処理が開始されていることなどがある。保護対象クラス記憶部254や保護対象処理条件記憶部255に登録されている条件が成立する場合には、後述するように、メソッド中止処理部212によるメソッド中止処理は行われない。
保護対象設定情報読込部215は、所定の設定ファイルからパッケージ名やクラス名の条件やメソッドの処理内容に対する条件を読み出して、保護対象クラス254及び保護対象処理条件記憶部255に登録する。図9は、保護対象設定情報読込部215が読み出す設定ファイルの内容の一例である。設定ファイルの各行には、上述したパッケージ名やクラス名の条件、メソッドの処理に対する条件などが記述される。なお、設定ファイルにおいて、「#」で始まる行はコメントである。
ログ書き出し部216は、監視部213によってスレッドで実行されているメソッドのタイムアウトが検出されたときに、メソッド処理情報記憶部251に記憶されているコールスタックやロック情報、トランザクション情報などに格納されているデータをログファイルに書き出す。また、ログ書き出し部216は、メソッド中止処理部212によってメソッド中止処理が行われた後にも、コールスタックに格納されているデータをログファイルに書き出す。なお、ログ書き出し部216は、例えば、サーバ装置20で実行されるオペレーティングシステムが管理するファイルシステム上のファイルにデータを書き出すようにしてもよいし、ハードディスクや磁気テープ、光磁気ディスク、フラッシュメモリなどの記録媒体に直接データを書き込むようにしてもよい。
なお、上記のユーザプログラム実行部211、メソッド中止処理部212、監視部213、コマンド受付部214、保護対象設定情報読込部215、ログ書き出し部216、及び最大実行時間読込部217の各機能部は、サーバ装置20のCPU201がメモリ202に記憶されるプログラム、オブジェクトのメソッド、又はスレッドを実行することにより、あるいは、ハードウェアにより実現される。また、メソッド処理情報記憶部251、最大実行時間記憶部252、スレッド情報記憶部253、保護対象クラス記憶部254、保護対象処理条件記憶部255、中止対象キュー256は、サーバ装置20のメモリ202や記憶装置203が提供する記憶領域上に実現される。また、本実施の形態に係る各機能部211〜217や各記憶部251〜255、中止対象キュー256は、ハードウェアやプログラム、オブジェクト、スレッド、プロセスのいずれでも実現可能である。
図10は、メソッド中止処理の流れを説明する図である。
第1のスレッド310は、メソッド中止処理部212を実現する一連のメソッドを実行し、第2のスレッド320は、ユーザプログラム実行部211を実現する一連のメソッドを実行する。中止対象キュー256に第2のスレッド320のスレッドIDが登録されると以下のメソッド中止処理が行われる。
メソッド中止処理部212は、中止対象キュー256からスレッドIDを読み出し(S301)、読み出したスレッドIDにより特定される第2のスレッド320に対してスレッド中止命令を送信する(S302)。
第2のスレッド320はスレッド中止命令の受信に応じて、実行中のメソッドの実行を中止し(S303)、スレッドが中止された旨を示す例外(以下、スレッド中止例外という。)をスローする(S304)。ユーザプログラム実行部211は、スレッド中止例外をキャッチし(S305)、中止されたメソッドに続いて実行されるべきメソッドを実行する(S306)。ユーザプログラム実行部211は、キャッチしたスレッド中止例外に代えて、一般的なエラーを示す例外(以下、一般例外という。)をスローする(S307)。
上記のように、本実施形態のメソッド中止処理では、第2のスレッド320にメソッド中止例外が発生した場合でも、スレッド単位で実行は中止されず、メソッド単位で実行が中止され、中止されたメソッドに後続するメソッドが実行される。したがって、メソッドの実行中又は実行前に、スレッド間の共有資源に対するロックの取得や、データベースに対するトランザクション処理が開始され、実行中のメソッドに後続のメソッドにおいてロックの解除やトランザクション処理のコミット又はロールバックが行われるようになっている場合であっても、実行中のメソッドの実行のみが中止され、後続のメソッドが継続実行される。これにより、ロックが取得されたままになったり、トランザクション処理が開始されたままになったりという状況を回避し、処理の整合性を確保することができる。よって、情報処理システム1全体の信頼性を向上することができる。
図11は、メソッド中止処理を、アプリケーションサーバのリクエスト処理に適用した具体例を示す図である。同図では、(S336)〜(S340)までの処理が上述したメソッド中止処理に該当する。
サーブレット321は、アプリケーションサーバにおいてクライアント装置10から送信されるHTTPリクエストを受信するオブジェクトである。コンテナオブジェクト322は、第2のスレッド320においてユーザプログラム実行部211を実現するオブジェクトである。処理オブジェクト323は、第2のスレッド320においてユーザプログラムのクラスから生成されるオブジェクトである。処理オブジェクト323は、例えば、EJB(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)オブジェクトとして実装される。中止処理オブジェクト311は、第1のスレッド310においてメソッド中止処理部212を実現するオブジェクトである。
サーブレット321はHTTPリクエストに対応する処理を行うリクエスト処理メソッドを有し、第2のスレッドは、サーブレット321のリクエスト処理メソッドを実行することにより、一連のメソッドの実行を開始する。処理オブジェクト323は処理メソッド2を有しており、コンテナオブジェクト322は、処理オブジェクト323の処理メソッド2を呼び出す処理メソッド1と、他のスレッドと間の排他ロックを取得する処理を行うロック取得メソッド、上記排他ロックを解除する処理を行うロック解除メソッドを有している。
第2のスレッド320は、クライアント装置10から送信されるHTTPリクエストに応じて、サーブレット321のリクエスト処理メソッドを実行する(S331)。サーブレット321は、リクエスト処理メソッドにおいて、コンテナオブジェクト322の処理メソッド1を呼び出す(S332)。コンテナオブジェクト322は、処理メソッド1からロック取得メソッドを呼び出し(S333)、ロック取得メソッドにおいて排他ロックを取得する処理を行う。コンテナオブジェクト322は、排他ロックを取得すると、処理オブジェクト323の処理メソッド2を呼び出し(S334)、処理オブジェクト323は処理メソッド2を実行する(S335)。
ここで、例えばコマンド受付部214がメソッド中止コマンドを受け付けた場合や、後述するように、監視部213が処理メソッド2のタイムアウトを検出した場合など、中止対象キュー256に第2のスレッドのスレッドIDが登録されると、第1のスレッド310において中止処理オブジェクト311は中止対象キュー256から第2のスレッドのスレッドIDを読み出し、第2のスレッド320に対してスレッド中止命令(例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)ではstopである。)を送信する(S336)。
第2のスレッド320は、スレッド中止命令の受信に応じて、スレッド中止例外(例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)では、ThreadDeathである。)をスローし、処理オブジェクト323は処理メソッド2の実行を中止する(S337)。スレッド中止例外はコンテナオブジェクト322に伝播されるが(S338)、コンテナオブジェクト322は、スレッド中止例外をキャッチし、処理オブジェクト323の処理メソッド2に後続して実行すべきロック解除メソッドを呼び出し(S339)、上記の排他ロックを解除する。コンテナオブジェクト322は、キャッチしたスレッド中止例外に代えて、一般例外(例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)では、例えばRuntimeExceptionなどである。)をスローする。一般例外はメインオブジェクト321に伝播する(S340)。サーブレット321は、一般例外をキャッチして例外処理を行い(S341)、HTTPリクエストに対する応答を返す(S342)。
以上のように、処理オブジェクト323の処理メソッド2に後続して実行すべき、コンテナオブジェクト322のロック解除メソッドが実行されるので、排他ロックが取得されたままになってしまうような状況を回避し、他に実行されているスレッドとの間で処理の整合性を確保することができる。
また、スレッド中止命令に応じて第2のスレッド320全体の実行が中止してしまうようなことがないので、サーブレット321は、例外処理によって処理メソッド2の実行でエラーが起こった旨の応答を返すことができる。つまり、リクエストに対する応答を確実に返すようにすることができる。
また、第2のスレッド320は継続して実行されるため、再度第2のスレッド320を起動する必要がなく、後続するクライアント装置10からのリクエストに対しても迅速に応答することができる。よって、情報処理システム1の応答性を高めることができる。
次に、上述したメソッド中止処理を行う契機となる、メソッドのタイムアウト監視処理について説明する。図12は、タイムアウト監視処理の流れを説明するための図である。監視部213は、スレッド情報記憶部253に記憶されている全てのスレッドのそれぞれを調査対象スレッドとして、図12に示す処理を行う。
監視部213は、スレッド情報記憶部253を参照して、調査対象スレッドのスレッドID(以下、調査対象IDという。)に対応するスレッドの状態が「タイムアウト」であるかどうかを判断する(S401)。スレッドの状態が「タイムアウト」である場合(S401:YES)、監視部213は処理を終了する。
スレッドの状態が「タイムアウト」でない場合(S401:NO)、監視部213は、調査対象IDに対応するメソッド処理情報記憶部251のコールスタックから、調査対象スレッドが実行中であるメソッドのメソッド名を読み出し、読み出したメソッド名と調査対象IDとに対応する開始時刻と最大実行時間とをスレッド情報記憶部253から読み出す。メソッドの開始時刻に最大実行時間を加えた時刻が現在時刻を超えている場合(S402:YES)、すなわちメソッドの開始時刻から現在時刻までの実行時間(実効時間算出部)が最大実行時間を超えてタイムアウトしていない場合、監視部213は処理を終了する。
一方、メソッドの開始時刻に最大実行時間を加えた時刻が現在時刻を超えず、メソッドの実行がタイムアウトした場合(S402:NO)、監視部213は、調査対象IDに対応するスレッド情報記憶部253のスレッドの状態を「タイムアウト」に設定し(S403)、調査対象IDを中止対象キュー256に登録する(S404)。
中止対象キュー256にスレッドIDが登録されると、メソッド中止処理部212により上述したメソッド中止処理が行われる。図13〜15は、メソッドの実行時間がタイムアウトしたときに行われる上述したメソッド中止処理のうち、図10の(S301)〜(S302)に対応する処理の詳細を説明するための図である。
図13に示すように、メソッド中止処理部212は、中止対象キュー256に登録されているスレッドIDを読み出し(S421)、スレッド情報記憶部253に記憶されている、読み出したスレッドID(以下、中止対象IDという。)に対応するスレッドの状態が「タイムアウト」であるかどうかを判断する(S422)。スレッドの状態が「タイムアウト」でなければ(S422:NO)、メソッド中止処理部212は処理を終了する。
スレッドの状態が「タイムアウト」である場合(S422)、メソッド中止処理部212は、中止対象IDに対応するスレッド情報記憶部253のスレッドの状態を「中止処理中」に設定し(S423)、ログ書き出し部216は、中止対象IDに対応するメソッド処理情報記憶部251のコールスタックから、中止対象IDにより識別されるスレッド(以下、中止対象スレッドという。)が実行中であったメソッド(以下、中止対象メソッドという。)に関するデータを読み出してログファイルに書き出す(S424)。メソッド中止処理部212は、図14に示す処理により中止対象メソッドを中止する(S425)。
図14に示すように、メソッド中止処理部212は、中止対象スレッドに一時停止命令(例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)ではsuspendである。)を送信し、中止対象スレッドを一時停止させる(S441)。メソッド中止処理部212は、メソッド処理情報記憶部251の中止対象IDに対応するコールスタックから、中止対象スレッドが実行中であったメソッドのメソッド名を取得し、このメソッドが保護対象として設定されているかどうかを、図15に示す処理により判定する(S442)(保護判断部)。
図15に示すように、メソッド中止処理部212は、中止対象メソッドのメソッド名又は、中止対象メソッドが属するクラスのクラス名が、保護対象クラス記憶部254に登録されているかどうかを判断する(S461)。メソッド名又はクラス名が登録されていない場合(S461:NO)、メソッド中止処理部212は、メソッド処理情報記憶部251の中止対象IDに対応するコールスタックから中止対象メソッドに関するデータを読み出す(S462)。メソッド中止処理部212は、読み出した中止対象メソッドに関するデータが、保護対象処理条件記憶部255に記憶されている各条件に合致するかどうかを判断し(S463)、条件に合致しない場合(S463:NO)、中止対象メソッドは保護対象になっていないと判定する(S464)。
一方、中止対象メソッドのメソッド名又はクラス名が保護対象クラス記憶部254に記憶されている場合(S461:YES)、又は、コールスタックから読み出した中止対象メソッドに関するデータが、保護対象処理条件記憶部255に記憶されている条件のいずれかに合致する場合(S463:YES)には、メソッド中止処理部212は、中止対象メソッドは保護対象となっていると判定する(S465)。
中止対象メソッドが保護対象である場合(図14;S443:YES)、メソッド中止処理部212は、中止対象スレッドに対して一時停止解除命令(例えばJava(サン・マイクロシステムズ・インコーポレーテッドの商標又は登録商標)ではresumeである。)を送信し、中止対象スレッドの一時停止を解除する(S444)。メソッド中止処理部212は、中止対象IDに対応するスレッド情報記憶部253のスレッドの状態を「タイムアウト」に戻して(S445)、処理を終了する。
中止対象メソッドが保護対象でない場合(S443:NO)、メソッド中止処理部212は、中止対象スレッドに対してスレッド中止命令を送信する(S446)。ログ書き出し部216は、中止対象IDに対応するメソッド処理情報記憶部251のコールスタックから、中止対象スレッドに関する情報を読み出して、ログファイルに書き出す(S447)。メソッド中止処理部212は、中止対象スレッドに対して一時停止解除命令を送信して、中止対象スレッドの一時停止を解除し(S448)、中止対象IDに対応するスレッド情報記憶部253のスレッドの状態を「中止完了」に設定する(S449)。
図16は、メソッドの実行時間がタイムアウトしたときに行われる上述したメソッド中止処理のうち、図10の(S303)〜(S308)に対応する処理の詳細を説明するための図である。
中止対象スレッドにおいてスレッド中止例外が発生すると(S481)、ユーザプログラムのオブジェクト(以下、ユーザオブジェクトという。)にスレッド中止例外が伝播し、ユーザオブジェクトはメソッドの実行を中止する(S482)。続いて、ユーザプログラムを実行しているユーザプログラム実行部211にスレッド中止例外が伝播するが、ユーザプログラム実行部211はスレッド中止例外を捕捉する(S483)。ユーザプログラム実行部211は、スレッド中止例外を捕捉すると、例えば、ロックの解除やデータベースに対するトランザクションのロールバックなどの後処理を行い(S484)、一般的なエラーを示す例外を発生させる(S485)。また、ユーザプログラム実行部211は、ユーザプログラム実行部211が実行されているスレッドのスレッドIDに対応するスレッド情報記憶部253のスレッドの状態を「実行中」に設定する(S486)。
このようにして、スレッドで発生したスレッド中止例外は、ユーザプログラム実行部211によって捕捉され、ロックの解除やトランザクションのロールバックなどの後処理の上、一般的なエラーを示す例外が発生される。したがって、ユーザオブジェクトのメソッドが中断されても、ユーザプログラム実行部211によって後処理が行われるため、スレッド間におけるデッドロックやデータの不整合などを防ぐことができる。よって、情報処理システム1の信頼性を高めることができる。また、スレッド自体の処理は継続されるため、再度スレッドを起動する必要がない。したがって、スレッドの起動にかかる処理負荷を低減し、情報処理システム1全体の処理効率を高めることができる。
また、本実施形態のサーバ装置20では、所定時間内にメソッドの処理が終了しない場合にそのメソッドの実行を中止する。したがって、例えば無限ループなどにより、システムのCPU資源を消費して情報処理システム1全体の負荷を上げてしまうような処理を行っているメソッドが存在する場合に、所定時間経過後にそのメソッドを中止するようにすることができる。これにより、無限ループなどによりサーバ装置20の処理負荷が増加してしまう時間を所定時間に限り、高負荷な状態が続くことを回避することができる。よって、情報処理システム1全体としての処理効率を高めることができる。
また、本実施形態のサーバ装置20では、クラス名やメソッド名、メソッドにおいて行われる処理の条件などによって、保護対象となるメソッドを設定しておくことで、保護対象として設定されているメソッドの実行は中止しないようにすることができる。したがって、より柔軟な運用が可能となる。例えば、コンテナの機能を利用しない排他制御を行うユーザプログラムを開発する場合には、排他ロックの取得から解除までの間に実行されるメソッドを保護対象として設定しておくことにより、ロックが取得されたままになる状態やデッドロックなどを回避することができる。これにより、情報処理システム1全体の信頼性を向上することができる。
また、本実施形態では、メソッドの実行時間がタイムアウトした時と、メソッドが中止された時の2度、コールスタックやログ情報、トランザクション情報などの内容がログファイルに書き出される。したがって、ユーザプログラムの開発者は、これらのログファイルを比較することにより、実行時間がタイムアウトした時のスレッドの状態と、メソッドの実行が中止された後のスレッドの状態とを詳細に比較することができる。これにより、開発者は、例えば、再帰的なメソッドの呼び出し、異常な変数の値、不正なアドレスに対するアクセスなどを容易に把握することができる。したがって、開発者はバグの原因を容易に調査することが可能となる。また、例えば、ユーザプログラムの開発時におけるテストに応用することで、効果的かつ効率的なテストを行うこともできる。
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
本発明の一実施の形態による、本実施形態に係る情報処理システム1の全体構成を示す図である。 本発明の一実施の形態による、サーバ装置20のハードウェア構成の一例を示す図である。 本発明の一実施の形態による、サーバ装置20の機能ブロック図である。 本発明の一実施の形態による、メソッド処理情報記憶部251の構成例を示す図である。 本発明の一実施の形態による、最大実行時間記憶部252の構成例を示す図である。 本発明の一実施の形態による、スレッド情報記憶部253の構成例を示す図である。 本発明の一実施の形態による、保護対象クラス記憶部254の一例を示す図である。 本発明の一実施の形態による、保護対象処理条件記憶部255の一例を示す図である。 本発明の一実施の形態による、保護対象設定情報読込部215が読み出す設定ファイルの内容の一例を示す図である。 本発明の一実施の形態による、メソッド中止処理の流れを説明するための図である。 本発明の一実施の形態による、メソッド中止処理の流れの具体例を示す図である。 本発明の一実施の形態による、タイムアウト監視処理の流れを説明するための図である。 本発明の一実施の形態による、メソッド中止処理の流れを説明するための図である。 本発明の一実施の形態による、メソッド中止処理の流れを説明するための図である。 本発明の一実施の形態による、メソッドが保護対象となっているかどうかを判定する処理の流れを示す図である。 本発明の一実施の形態による、スレッド中止例外が発生したときの処理の流れを示す図である。
符号の説明
10 クライアント装置
20 サーバ装置
30 通信ネットワーク
201 CPU
202 メモリ
203 記憶装置
204 記憶媒体読取装置
205 通信インタフェース
211 ユーザプログラム実行部
212 メソッド中止処理部
213 監視部
214 コマンド受付部
215 保護対象設定情報読込部
216 ログ書き出し部
217 最大実行時間読込部
251 メソッド処理情報記憶部
252 最大実行時間記憶部
253 スレッド情報記憶部
254 保護対象クラス記憶部
255 保護対象処理条件記憶部
256 中止対象キュー

Claims (11)

  1. メソッドを実行する第1及び第2のスレッドを実行する情報処理装置におけるメソッドの処理方法であって、
    前記第1のスレッドが前記第2のスレッドの実行中止命令を前記第2のスレッドに送信するステップと、
    前記第2のスレッドが、前記実行中止命令の受信に応じて、実行中の第1のメソッドの実行を中止するとともに、前記第1のメソッドの次に実行すべき第2のメソッドの実行を開始するステップと、
    を含むことを特徴とするメソッドの処理方法。
  2. 請求項1に記載のメソッドの処理方法であって、
    中止すべきでないメソッドを特定する情報をメモリに記憶するステップと、
    前記第1のスレッドが、前記第1のメソッドが前記情報で特定されるメソッドであるかどうかを判断するステップと、
    前記第1のスレッドが、前記第1のメソッドが前記情報で特定されるメソッドでない場合に前記実行中止命令を前記第2のスレッドに送信するステップと、
    をさらに含むことを特徴とするメソッドの処理方法。
  3. 請求項1に記載のメソッドの処理方法であって、
    前記第1のメソッドの最大実行時間をメモリに記憶するステップと、
    前記第1のスレッドが、前記第1のメソッドの実行時間が前記最大実行時間を超えると前記実行中止命令を前記第2のスレッドに送信するステップと、
    をさらに含むことを特徴とするメソッドの処理方法。
  4. 請求項3に記載のメソッドの処理方法であって、
    前記第1のスレッドが、前記第1のメソッドの実行時間が前記最大実行時間を超えると、前記第2のスレッドが実行する前記メソッドの実行に関する情報をメモリに書き出すステップと、
    前記第2のスレッドが、前記第1のメソッドの実行を中止すると、当該第2のスレッドが実行する前記メソッドの実行に関する情報を前記メモリに書き出すステップと、
    をさらに含むことを特徴とするメソッドの処理方法。
  5. 請求項1に記載のメソッドの処理方法であって、
    前記第1のメソッドの最大実行時間をメモリに記憶するステップと、
    第3のスレッドが、前記第2のスレッドによる前記第1のメソッドの実行時間が前記最大実行時間を超えると、前記第2のスレッドを特定する情報を、前記メモリに構築されるキューに追加するステップを含み、
    前記第1のスレッドは、前記キューに登録されている前記第2のスレッドを特定する情報を読み出し、読み出した前記情報により特定される前記第2のスレッドに対して、前記実行中止命令を送信すること、
    を特徴とするメソッドの処理方法。
  6. 請求項1に記載のメソッドの処理方法であって、
    前記第2のスレッドが、前記第1のメソッドにおいて他のスレッドとの間で共有している資源に対するロックの取得、及びデータベースに対するトランザクション処理のうち、少なくとも何れかが行われているかどうかを判断するステップと、
    前記第2のスレッドが、前記ロックの取得及び前記トランザクション処理のうち少なくとも何れかが行われている場合に、前記第1のメソッドの実行を中止するとともに、前記ロックの解放及び前記トランザクション処理のロールバックのうち、少なくとも何れかを行うステップと、
    をさらに含むことを特徴とするメソッドの処理方法。
  7. 請求項1に記載のメソッドの処理方法であって、
    ユーザから前記第2のスレッドによるメソッドの実行を中止する旨の指示を受け付けるステップを含み、
    前記第1のスレッドは、前記指示に応じて前記実行中止命令を前記第2のスレッドに送信すること、
    を特徴とするメソッドの処理方法。
  8. CPUと、メモリと、
    メソッドを実行する第1及び第2のスレッドを実行するスレッド実行部と、
    前記第1のスレッドから、前記第2のスレッドの実行中止命令を第2のスレッドに送信させる実行中止命令送信部と、
    前記実行中止命令の受信に応じて、実行中の第1のメソッドの実行を中止するとともに、前記第1のメソッドの次に実行すべき第2のメソッドの実行を前記第2のスレッドに開始させるメソッド実行部と、
    を備えることを特徴とする情報処理装置。
  9. 請求項8に記載の情報処理装置であって、
    前記第2のスレッドにより実行されるメソッドを記憶するスタックと、
    前記第2のスレッドにより実行されるメソッドを特定する情報に対応付けて、当該メソッドの最大実行時間を記憶する最大実行時間記憶部と、
    前記第2のスレッドにより実行されたメソッドを特定する情報と、当該メソッドが前記スタックに記憶された実行開始時刻とを対応付けて記憶する実行開始時刻記憶部と、
    中止すべきでないメソッドを特定する情報である保護対象メソッド特定情報を記憶する保護メソッド記憶部と、
    前記第1のスレッドを特定する情報に対応する、前記最大実行時間及び前記実行開始時刻を読み出し、当該実行開始時刻に基づいて前記第1のメソッドの実行時間を算出する実行時間算出部と、
    前記実行時間が前記最大実行時間を超えている場合に、前記第1のメソッドが前記保護メソッド記憶部に記憶されている前記保護対象メソッド特定情報で特定されるメソッドであるかどうかを判断する保護判断部と、
    を備え、
    前記中止命令送信部は、前記第1のメソッドが前記保護対象メソッド特定情報で特定されるメソッドでない場合に、前記第1のスレッドから前記第2のスレッドに前記実行中止命令を送信させること、
    を特徴とする情報処理装置。
  10. メソッドを実行する第1及び第2のスレッドを実行するコンピュータに、
    前記第1のスレッドが前記第2のスレッドの実行中止命令を前記第2のスレッドに送信するステップと、
    前記第2のスレッドが、前記実行中止命令の受信に応じて、実行中の第1のメソッドの実行を中止するとともに、前記第1のメソッドの次に実行すべき第2のメソッドの実行を開始するステップと、
    を実行させるためのプログラム。
  11. プログラムを実行する第1及び第2のスレッドを実行する情報処理装置におけるプログラムの処理方法であって、
    前記第1のスレッドが前記第2のスレッドの実行中止命令を前記第2のスレッドに送信するステップと、
    前記第2のスレッドが、前記実行中止命令の受信に応じて、実行中の第1のプログラムの実行を中止するとともに、前記第1のプログラムの次に実行すべき第2のプログラムの実行を開始するステップと、
    を含むことを特徴とするプログラムの処理方法。
JP2008144669A 2008-06-02 2008-06-02 情報処理装置におけるメソッドの処理方法、情報処理装置、及びプログラム Expired - Fee Related JP4327226B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008144669A JP4327226B2 (ja) 2008-06-02 2008-06-02 情報処理装置におけるメソッドの処理方法、情報処理装置、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008144669A JP4327226B2 (ja) 2008-06-02 2008-06-02 情報処理装置におけるメソッドの処理方法、情報処理装置、及びプログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2004337560A Division JP2006146678A (ja) 2004-11-22 2004-11-22 情報処理装置におけるプログラム制御方法、情報処理装置、及びプログラム

Publications (2)

Publication Number Publication Date
JP2008251038A true JP2008251038A (ja) 2008-10-16
JP4327226B2 JP4327226B2 (ja) 2009-09-09

Family

ID=39975822

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008144669A Expired - Fee Related JP4327226B2 (ja) 2008-06-02 2008-06-02 情報処理装置におけるメソッドの処理方法、情報処理装置、及びプログラム

Country Status (1)

Country Link
JP (1) JP4327226B2 (ja)

Also Published As

Publication number Publication date
JP4327226B2 (ja) 2009-09-09

Similar Documents

Publication Publication Date Title
US7886297B2 (en) Program control process for an information processing apparatus
US7912895B2 (en) System and method for managing service interactions
US9117027B2 (en) Method and system for compliance testing in a cloud storage environment
JP5215779B2 (ja) 情報処理装置及び情報処理方法
CN100498725C (zh) 用于最小化计算机应用程序中的丢失的方法和系统
US7058950B2 (en) Callback event listener mechanism for resource adapter work executions performed by an application server thread
CN104205109B (zh) 持续性和弹性的工作者进程
US9229844B2 (en) System and method for monitoring web service
JP5423871B2 (ja) 情報処理装置、情報処理方法、およびプログラム
US9311214B2 (en) System and methods for tracing individual transactions across a mainframe computing environment
JP2000020364A (ja) 補償するリソ―ス・マネ―ジャ
US20070033640A1 (en) Generic context service in a distributed object environment
JP2001147901A (ja) ローカル・ジョブ制御システムを有する分散処理システム内での外部ジョブ・スケジューリング方法及びシステム
US20120216184A1 (en) Runtime code replacement
TW201025138A (en) Real-time signal handling in guest and host operating systems
CN109062982B (zh) 财务数据交互方法、装置、计算机设备和存储介质
US7783742B2 (en) Dynamic process recovery in a distributed environment
US8341603B2 (en) Test case management controller web access
US8132174B2 (en) Concurrency management in cluster computing of business applications
WO2015131542A1 (zh) 数据处理方法、装置和系统
US20090228870A1 (en) On-demand monitoring of memory usage
CN106789308A (zh) 一种微服务架构可自动伸缩的gis服务装置及其控制方法
CN102314382A (zh) 一种紧急探查系统信息的方法及模块
US7853956B2 (en) Message system and method
US8566798B2 (en) Capturing context information in a currently occurring event

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080702

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080718

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081007

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090303

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090507

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090609

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090610

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120619

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4327226

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120619

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130619

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees