JP2017037539A - サーバ制御プログラム、サーバ制御方法およびサーバ制御装置 - Google Patents

サーバ制御プログラム、サーバ制御方法およびサーバ制御装置 Download PDF

Info

Publication number
JP2017037539A
JP2017037539A JP2015159333A JP2015159333A JP2017037539A JP 2017037539 A JP2017037539 A JP 2017037539A JP 2015159333 A JP2015159333 A JP 2015159333A JP 2015159333 A JP2015159333 A JP 2015159333A JP 2017037539 A JP2017037539 A JP 2017037539A
Authority
JP
Japan
Prior art keywords
server
thread
executed
application
manager
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.)
Pending
Application number
JP2015159333A
Other languages
English (en)
Inventor
励 河合
Tsutomu Kawai
励 河合
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015159333A priority Critical patent/JP2017037539A/ja
Priority to US15/214,740 priority patent/US20170048307A1/en
Publication of JP2017037539A publication Critical patent/JP2017037539A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)

Abstract

【課題】初期化後のアプリケーションプログラムに対するリクエストに応じたサーバの応答性能低下を抑制することを目的とする。【解決手段】サーバ制御装置は、サーバで実行されるアプリケーションプログラムの初期化が完了した旨の通知に応じて、前記サーバが実行する前記アプリケーションプログラムの実行単位の数を取得する取得部と、前記サーバで実行される全ての前記実行単位の動作を停止する指示を送信する停止指示部と、取得された前記実行単位の数と少なくとも同数のリクエストを前記サーバに送信する送信部と、前記送信部が前記リクエストを送信した後に、停止された前記全ての実行単位の動作を再開させる指示を前記サーバに送信する再開指示部と、を含む。【選択図】図2

Description

本発明は、サーバ制御プログラム、サーバ制御方法およびサーバ制御装置に関する。
クラウドサービスの利用形態の1つとして、サービス提供側のサーバで動作するアプリケーションを利用者側のクライアントが利用する形態がある。サーバで動作するアプリケーションは、修正や変更等が行われることがある。この場合、アプリケーションの初期化が行われる。
関連する技術として、プロセスが初期化のときに、またはアプリケーションマネージャからのコマンドに応答して、コンテキストをダイナミックに再初期化するように、更新されたマスタウォームアッププログラムを実行する技術が提案されている。
また、アクティブな制御ユニットにおいて複製されるべき能動的なプロセスまたは大きなプロセスグループの動作を一時的に凍結すると同時に、アクティブな制御ユニットの他のプロセスを動作状態に保持する技術が提案されている。
また、プロセスの切り替えをなくし、オペレーティングシステムのプロセスやアプリケーションプログラムをシステムで唯一つ用意したプロセス配下のスレッドとして動作させる技術が提案されている(特許文献1乃至3を参照)。
特開2005−216288号公報 特表平9−507983号公報 特開2001−331331号公報
アプリケーション(アプリケーションプログラム)の初期化が行われると、アプリケーションは実行可能な状態になる。
ただし、アプリケーションの初回実行時に、アプリケーションの実行に使用される情報がロードされていないこと等を要因として、クライアントから送られたリクエストに対して、アプリケーションがレスポンスを返すときのサーバの応答性能が低下する。
1つの側面として、本発明は、初期化後のアプリケーションプログラムに対するリクエストに応じたサーバの応答性能低下を抑制することを目的とする。
1つの態様では、サーバ制御プログラムは、サーバで実行されるアプリケーションプログラムの初期化が完了した旨の通知に応じて、前記サーバが実行する前記アプリケーションプログラムの実行単位の数を取得し、前記サーバで実行される全ての前記実行単位の動作を停止する指示を送信し、取得された前記実行単位の数と少なくとも同数のリクエストを前記サーバに送信し、停止された前記全ての実行単位の動作を再開させる指示を前記サーバに送信する、処理をコンピュータに実行させる。
1つの側面によれば、初期化後のアプリケーションプログラムに対するリクエストに応じたサーバの応答性能低下を抑制することができる。
システム構成の一例を示す図である。 サーバ制御装置の一例を示す機能ブロック図である。 サーバ管理テーブルの一例を示す図である。 アプリ管理テーブルの一例を示す図である。 制御側スレッド管理テーブルの一例を示す図である。 サーバ側スレッド管理テーブルの一例を示す図である。 実施形態の処理の流れの一例を示すフローチャートである。 初期化後制御の処理の流れの一例を示すフローチャート(その1)である。 初期化後制御の処理の流れの一例を示すフローチャート(その2)である。 初期化後制御の処理の流れの一例を示すフローチャート(その3)である。 スレッド停止処理の流れの一例を示すフローチャートである。 対象スレッド停止処理の流れの一例を示すフローチャートである。 スレッド再開処理の流れの一例を示すフローチャートである。 対象スレッド再開処理の流れの一例を示すフローチャートである。 実行状況確認処理の流れの一例を示すフローチャートである。 対象スレッド実行状況確認処理の流れの一例を示すフローチャート(その1)である。 対象スレッド実行状況確認処理の流れの一例を示すフローチャート(その2)である。 全スレッド再開処理の一例を示すフローチャートである。 サーバ制御装置のハードウェア構成の一例を示す図である。
<システムの一例>
以下、図面を参照して、実施形態のシステムの一例について説明する。実施形態のシステム1は、クライアント2と複数のサーバ3とサーバロードバランシング4とサーバ制御装置5とデータベース6とを含む。
図1では、クライアント2は1つの場合を例示しているが、クライアント2の数は複数であってもよい。また、図1では、複数のサーバ3(サーバ3−1およびサーバ3−2)を例示しているが、サーバ3の数は1つであってもよいし、3つ以上であってもよい。
サーバ3は、物理的なコンピュータであってもよいし、仮想的なコンピュータであってもよい。例えば、サーバ3−1およびサーバ3−2は、1台の物理的なコンピュータで実現される仮想的なコンピュータであってもよい。
サーバロードバランシング4は、Server Load Balancing(SLB)とも称され、クライアント2からのリクエストを各サーバ3に分散出力する。各サーバ3で動作するアプリケーションプログラム(以下、単にアプリケーションと称する)は、受信したリクエストに対するレスポンスをクライアント2に返信する。
サーバ制御装置5は、各サーバ3の制御を行う。実施形態のサーバ制御装置5は、サーバ3で動作するアプリケーションが初期化された後、クライアント2からアプリケーションに送信されたリクエストに応じたサーバ3の応答性能低下を抑制する制御を行う。
データベース6は、各サーバ3で動作するアプリケーションが使用する各種の情報を記憶する。
次に、サーバ3について説明する。サーバ3は、アプリサーバ11と実行部12とサブマネージャ13とログ記憶部14とサーバ側テーブル記憶部15とを含む。アプリサーバ11は、アプリケーションサーバである。
アプリサーバ11は、サーバ3で動作するアプリケーションを管理する。実施形態では、アプリケーションは複数のスレッドに分割される。図1の例では、アプリケーションApp1のスレッド1番とスレッド2番とが示されている。
スレッドは、アプリケーションの実行単位の一例である。アプリケーションの実行単位は、例えばプロセスであってもよい。複数のスレッドや複数のプロセスは、並列実行されてもよい。アプリケーションはプログラムにより実現されるため、スレッドやプロセス等の実行単位もプログラムにより実現される。
アプリサーバ11は、クライアント2から受信したリクエストをアプリケーションの各スレッドに振り分ける。また、アプリサーバ11は、サーバ制御装置5から受信したリクエストをアプリケーションの各スレッドに振り分ける。
実行部12では、リクエストに応じて、アプリケーションApp1の各スレッドが実行される。実行部12は、アプリケーションApp1だけでなく、複数のアプリケーションの各スレッドを含んでもよい。
サブマネージャ13は、アプリサーバ11やアプリケーションの各スレッドに対して所定の制御を行う。また、サブマネージャ13は、ログ記憶部14に記憶される情報を参照する。また、サブマネージャ13は、サーバ側テーブル記憶部15が記憶するテーブルに所定の情報を記憶し、記憶された情報を参照する。
実施形態では、アプリサーバ11と実行部12とサブマネージャ13とは、サーバ3で動作するプログラムにより、その機能が実現される。
ログ記憶部14は、アプリサーバ11が管理する各アプリケーションに関するログ(以下、アプリサーバログと称する)またはアプリケーションに関するログ(以下、アプリログ)を記憶する。なお、ログが使用されない場合、サーバ3はログ記憶部14を含まなくてもよい。
サーバ3で実行されるアプリケーションは、修正や更新等が行われることがある。修正や更新されるアプリケーションのデータはパッチとも称される。アプリケーションが修正や更新されると、サーバ3はアプリケーションを初期化(イニシャライズ)する。この初期化により、該アプリケーションは実行可能な状態になる。
例えば、アプリケーションの修正や更新等を行うための手法の1つとして、ローリングアップデートと呼ばれる手法がある。ローリングアップデートでは、複数のサーバ3のうち1台のサーバ3を離脱させて、離脱したサーバ3で動作するアプリケーションに対して修正や更新等が行われる。
これにより、複数のサーバ3により実現されるサービスの運用を停止させることなく、アプリケーションの修正や更新等が行われる。修正や更新されたアプリケーションは、サーバ3により初期化されて、実行可能な状態になる。
また、サーバ3が起動されるとき(例えば、サーバ3の電源がONになったとき)にも、該サーバ3で動作するアプリケーションの初期化が行われる。アプリケーションが初期化され、且つ該アプリケーションが実行されていない場合、該アプリケーションが使用する情報(例えば、アプリケーションのプログラムコード等)はロードされていない。
また、アプリケーションが初期化され、且つ該アプリケーションが実行されていない場合、他のリソースとの接続が確立されていない。この場合、例えば、サーバ3とデータベース6との接続が確立していない。
このため、初期化後のアプリケーションが、クライアント2からのリクエストに応じて、最初(初回)に実行される場合、上記の情報をロードする処理や接続の確立等が行われるため、所定の時間がかかる。このため、クライアント2から送られたリクエストに対するサーバ3の応答性能が低下する。
クライアント2は、サーバ3にアプリケーションの実行のリクエストを送信する。アプリサーバ11は、受信したリクエストをアプリケーションの各スレッドに振り分ける。これにより、各スレッドが実行される。
このとき、アプリケーションが初期化後、且つ未実行である場合、該アプリケーションに対するリクエストに応じたサーバ3の応答性能は低下しているため、クライアント2からのリクエストに対するレスポンス速度が低下する。
実施形態では、サーバ制御装置5が、初期化後、且つ未実行のアプリケーションが動作するサーバ3に対して所定の制御(以下、初期化後制御と称する)を行うことで、サーバ3の応答性能低下を抑制する。初期化後制御は、ウォームアップ制御とも称される。
<サーバ制御装置の一例>
次に、図2を参照して、サーバ制御装置5について説明する。サーバ制御装置5は、主制御部21とスレッド数取得部22と停止指示部23とリクエスト送信部24と判定部25と再開指示部26と制御側テーブル記憶部27と通信部28とを含む。
主制御部21は、サーバ制御装置5の全体的な制御を行う。スレッド数取得部22は、サーバ3のサブマネージャ13から、初期化後制御の対象となるアプリケーションのスレッド数を取得する。スレッド数取得部22は、実行単位数取得部の一例である。
停止指示部23は、初期化後制御の対象となるアプリケーションの全てのスレッドの動作を停止(サスペンド)させる指示(動作停止指示)をサブマネージャ13に送信する。サーバ3のサブマネージャ13は、この動作停止指示に基づいて、アプリケーションの各スレッドの動作を停止させる。これにより、各スレッドは実行を停止する。
リクエスト送信部24は、スレッド数取得部22が取得したスレッド数と少なくとも同数のリクエストをサーバ3に送信する制御を行う。送信されるリクエストは、例えばダミーリクエストであってもよい。リクエスト送信部24は、送信部の一例である。
判定部25は、初期化後制御を行うための所定の判定を行う。再開指示部26は、停止している全てのスレッドの動作を再開(レジューム)させる指示(動作再開指示)をサブマネージャ13に送信する。
サーバ3のサブマネージャ13は、動作再開指示に基づいて、停止中の各スレッドの動作を再開させる。サブマネージャ13は、例えばサーバ3のOSの機能を利用して、各スレッドの動作を再開させる。
制御側テーブル記憶部27は、初期化後制御を行うために参照される各種テーブルを記憶する。通信部28は、スレッド数取得部22、停止指示部23、リクエスト送信部24および再開指示部26の制御により、サーバ3と通信を行う。
<各種テーブルの一例>
次に、各種テーブルの一例について説明する。図3は、サーバ制御装置5の制御側テーブル記憶部27に記憶されるサーバ管理テーブルの一例を示している。サーバ管理テーブルは、サーバ制御装置5が制御の対象とする複数のサーバ3を管理するためのテーブルである。
図3の例のサーバ管理テーブルは、サーバIDとIPアドレスとアプリIDとサーバ状態とスレッド数確認と全スレッド数と機能IDと停止方法と確認方法と制御状態との項目を含む。IDはIdentificationの略称であり、IPはInternet Protocolの略称である。
サーバIDは、サーバ3を識別する識別子である。IPアドレスは、サーバIDに対応するサーバ3のIPアドレスを表す。アプリIDは、アプリケーションを識別する識別子である。サーバ状態は、サーバ3の状態を表す。
図3の例において、「停止中」はサーバ3が停止している状態であることを表す。「起動途中」はサーバ3が起動中であり、初期化が完了していない状態であることを表す。「制御中」は、サーバ3が初期化後制御を行っていることを表す。「運用中」は、サーバ3が運用中であることを表す。
スレッド数確認は、各サーバ3で動作するアプリケーションのスレッド数を確認する方法を表す。図3の例において、ps(pat)はオペレーティングシステムのプロセス一覧を取得した上で該当するスレッドを指定したパターンと一致するか判定することで、スレッド数を確認することを示す。スレッド数を取得する方法は、他の方法であってもよい。全スレッド数は、アプリIDで特定されるアプリケーションの機能ごとの全スレッドの数を表す。
機能について説明する。機能IDは、アプリケーションに含まれる機能を特定する識別子である。実施形態では、アプリケーションはWebアプリケーションであり、該Webアプリケーションには複数の機能が含まれているものとする。
なお、アプリケーションは、Webアプリケーションには限定されない。また、アプリケーションに含まれる機能の数は1つであってもよい。
例えば、図3の例において、「toppage」はWebアプリケーションのトップページを表示する機能である。「loginpage」はログイン画面を表示する機能である。例えば、「authentication」は認証を行う機能である。
図3の例に示すように、アプリIDで特定されるアプリケーションのスレッドは、アプリケーションの各機能を実行するスレッドでもある。従って、図3の例において、アプリIDで特定されるスレッド数が10の場合、各機能を実行するスレッド数も10になる。
停止方法は、スレッドの動作を停止させる方法である。図3の例の「sigstop」はオペレーティングシステムにスレッド停止を指示することにより、スレッドを停止させる手法を表している。スレッドの動作を停止させる方法は、他の方法であってもよい。
確認方法は、スレッドが実行しているかを判定する手法を表す。図3の例において、「cpuload(30ms)」は、Central Processing Unit(CPU)の負荷の増分に基づいて、スレッドが実行しているかを確認する方法であることを表している。「cpuload(30ms)」の例では、CPU負荷の増分が閾値(以下、負荷閾値と称する)である「30ms」を超えているかに基づいて、スレッドが実行しているかが確認される。
また、「syscall(300回)」は、スレッドによるシステムコールの発行数が閾値(以下、発行数閾値と称する)である「300回」を超えているかに基づいて、スレッドが実行しているかが確認される。
制御状態は、実施形態の初期化後制御の実行状況を表す。「完」は、機能IDで特定される機能について、初期化後制御が完了したことを表す。「実行中」は、機能IDで特定される機能について、初期化後制御が行われていることを表す。「未」は、機能IDで特定される機能について、初期化後制御が行われていないことを表す。
例えば、サーバ制御装置5の主制御部21は、実施形態の初期化後制御が完了したことを認識したときに、制御状態を「完」に設定してもよい。また、主制御部21は、実施形態の初期化後制御を開始したが、まだ完了していないことを認識したときに、制御状態を「実行中」にしてもよい。実施形態では、1つのサーバ3で「実行中」になる機能は1つである。
次に、図4の例を参照して、アプリ管理テーブルの一例について説明する。アプリ管理テーブルは、制御側テーブル記憶部27に記憶される。アプリ管理テーブルは、アプリIDと機能IDとプロトコルとポートとURLとBODYと応答との項目を含む。
プロトコルは、機能IDで特定される機能のプロトコルを表す。ポートは、機能IDで特定される機能のポート番号を表す。Uniform Resource Locator(URL)は、機能IDで特定される機能のURLを表す。
BODYは、機能IDで特定される機能に関する情報を表す。応答は、機能IDで特定される機能に対して、期待する応答が何かを表す。図4の例の場合、応答は全て単に成功したという応答が返ることを期待しているが、特定の内容を含む応答を期待する場合や、失敗という応答を期待する場合もある。
次に、図5の例を参照して、アプリ管理テーブルの一例について説明する。制御側スレッド管理テーブルは、制御側テーブル記憶部27に記憶される。制御側スレッド管理テーブルは、サーバIDとアプリIDと全スレッド数と機能IDと実行済スレッド数と送信済スレッド数との項目を含む。
実行済スレッド数は、機能IDで特定される機能のスレッドのうち、サーバ制御装置5が送信したリクエストを実行したスレッドの数を表す。送信済みリクエスト数は、サーバ制御装置5が、初期化後制御の対象となるアプリケーションを管理するアプリサーバ11に対して送信したリクエスト数を表す。
初期化後制御が行われている間、制御側スレッド管理テーブルの実行済スレッド数および送信済みリクエスト数の値は随時更新されていく。
次に、図6の例を参照して、サーバ側スレッド管理テーブルの一例について説明する。サーバ側スレッド管理テーブルは、サーバ3のサーバ側テーブル記憶部15に記憶される。サーバ側スレッド管理テーブルは、アプリIDとスレッドIDとスレッド状態と実行確認との項目を含む。
スレッドIDは、スレッドを特定する識別子である。スレッド状態は、スレッドIDで特定されるスレッドが実行中であるか、または停止中(サスペンド中)であるかを表す。実行確認は、スレッドIDで特定されるスレッドが、サーバ制御装置5が送信したリクエストを実行したかを表す。
実行確認が「未」であれば、スレッドがリクエストを実行したことが確認されていないことを表す。「実行済み」であれば、スレッドがリクエストを実行したことが確認されたことを表す。
<実施形態の処理の流れの一例を示すフローチャート>
次に、図7のフローチャートを参照して、実施形態の処理の一例について説明する。サーバ制御装置5の主制御部21は、サーバ3に対して、サブマネージャ13の動作を開始する指示(動作開始指示)を送信する(ステップS1)。
この動作開始指示に基づいて、サーバ3のサブマネージャ13は動作を開始する。サブマネージャ13の動作が開始すると、サブマネージャ13が保持している情報は初期値に設定される。
上述したように、サブマネージャ13は、サーバ3で動作するプログラムである。よって、サーバ制御装置5は、動作開始指示を送信するときに、サーバ3に新たにサブマネージャ13を生成する制御を行ってもよい。
スレッド数取得部22は、アプリケーションのスレッド数を含むスレッド情報をサブマネージャ13から取得する(ステップS2)。
例えば、サブマネージャ13は、スレッド数取得部22からの取得要求に応じて、サーバ3のOSの機能を使用して、アプリケーションのスレッド数を認識し、認識したスレッド数を含むスレッド情報をサーバ制御装置5に送信してもよい。これにより、スレッド数取得部22はスレッド情報を取得する。
サーバ3で動作するアプリケーションが初期化されると、サブマネージャ13は、アプリケーションが初期化されたことを検知する。この検知に応じて、サブマネージャ13は、アプリケーションの初期化が完了したことを示す通知(初期化完了通知)をサーバ制御装置5に送信する。
サーバ制御装置5の主制御部21は、通信部28が初期化完了通知を受信したかを判定する(ステップS3)。初期化完了通知を受信しない場合(ステップS3でNO)、処理は、次のステップに進まない。
通信部28が初期化完了通知を受信した場合(ステップS3でYES)、サーバ制御装置5は初期化後制御を行う(ステップS4)。実施形態では、アプリケーションの機能ごとに初期化後制御を行う。なお、初期化後制御は、1つのアプリケーションに対して行われてもよい。
サーバ制御装置5の主制御部21は、アプリケーションの全ての機能について初期化後制御が終了したかを判定する(ステップS5)。全ての機能の初期化後制御が終了していなければ(ステップS5でNO)、処理はステップS4に戻る。
全ての機能の初期化後制御が終了してれば(ステップS5でYES)、主制御部21は、サーバ3のサブマネージャ13に対して動作を終了する指示(動作終了指示)を送信する(ステップS6)。そして、処理は終了する。
ステップS6において、主制御部21は、サーバ3に対して、サブマネージャ13を削除する指示を送信してもよい。ステップS6の時点で、サブマネージャ13の役割は終わるため、サーバ3からサブマネージャ13が削除されてもよい。サブマネージャ13はプログラムにより実現されるため、サブマネージャ13が削除されることで、サーバ3のリソースの消費量が低減する。
<初期化後制御の処理の一例>
次に、図8乃至図10のフローチャートを参照して、初期化後制御の処理の一例について説明する。主制御部21は、制御側テーブル記憶部27の各種テーブルの情報のうち所定の情報をクリアする(ステップS11)。
例えば、主制御部21は、図3で示したサーバ管理テーブルのうち、制御状態をクリア(初期値に設定)する。また、主制御部21は、図5で示した制御側スレッド管理テーブルのうち、実行済スレッド数および送信済リクエスト数の値をゼロに設定する。
主制御部21は、サーバ3のサーバ側テーブル記憶部15の情報をクリアする指示をサブマネージャ13に送信する(ステップS12)。サブマネージャ13は、この指示に基づいて、サーバ側テーブル記憶部15のサーバ側スレッド管理テーブルの情報をクリアする。
例えば、サブマネージャ13は、図6で示したサーバ側スレッド管理テーブルのうち、スレッド状態および実行確認を初期値に設定する。
リクエスト送信部24は、送信したリクエストの数(送信済みリクエスト数)を管理する。このため、リクエスト送信部24は、制御側スレッド管理テーブルの送信済みリクエスト数をゼロに設定する(ステップS13)。
次に、停止指示部23は、初期化後制御の対象となるアプリケーションの全てのスレッドの動作を停止する動作停止指示をサブマネージャ13に送信する(ステップS14)。サブマネージャ13は、例えば、サーバ3のOSの機能を利用して、各スレッドの動作を停止させる。
スレッド数取得部22は、サブマネージャ13に対して、停止済みのスレッド数を取得する要求をサブマネージャ13に送信する。この要求に応じて、サブマネージャ13は、OSの機能を利用して、停止済みのスレッド数を認識し、認識した停止済みのスレッド数の情報をサーバ制御装置5に送信する。
これにより、スレッド数取得部22は、停止済みスレッド数を取得する(ステップS15)。最初にステップS15が実行されるときの停止済みスレッド数は、アプリケーションのスレッド数と同じである。
判定部25は、ループ回数が停止済みスレッド数に達したかを判定する(ステップS16)。ステップS17およびステップS18の処理は繰り返し行われる。ループ回数は、ステップS17およびステップS18の処理が行われた回数である。
ループ回数が停止済みスレッド数に達していない場合(ステップS16でNO)、リクエスト送信部24は、リクエストをアプリサーバ11に送信し(ステップS17)、送信済みリクエスト数をインクリメントする(ステップS18)。
従って、ステップS18の処理が実行されるごとに、制御側スレッド管理テーブルの送信済みリクエスト数がインクリメントされていく。
ステップS17の処理が1回行われることにより、1つのリクエストがサーバ3に送信される。ループ回数が停止済みスレッド数に達した場合(ステップS16でYES)、サーバ制御装置5は、停止済みスレッド数と同数のリクエストをアプリサーバ11に送信したことになる。
ここで、サーバ制御装置5によるリクエストの送信について説明する。上述したように、初期化後のアプリケーションの初回実行時において、該アプリケーションに対するリクエストに応じたサーバ3の応答性能は低下する。
従って、初期化後のアプリケーションが未実行の場合、クライアント2から該アプリケーションに対して送信されたレスポンスに対するサーバ3の応答性能は低下する。このため、クライアント2からのアプリケーションに対するリクエストに応じたレスポンス速度は低下する。
そこで、実施形態では、サーバ制御装置5は、初期化完了通知を受信したことに応じて、ステップS10で取得されたスレッド数と同数のリクエストをアプリサーバ11に送信する。
アプリサーバ11は、受信したリクエストをアプリケーションの各スレッドに振り分ける。リクエストが振り分けられたスレッドは、該リクエストに応じて、実行する。スレッドが実行されると、該スレッドが使用する情報がロードされ、他のリソースとの接続も確立される。
従って、実行済みのスレッドの実行速度は、該スレッドが未実行のときよりも高速になる。このため、実行済みのスレッドに対するリクエストについては、サーバ3の応答性能が良好になる。
ただし、未実行のスレッドの実行速度は、実行済みのスレッドの実行速度よりも低速である。このため、未実行のスレッド数が多くなると、サーバ3の応答性能低下の抑制効果が高くならないことが想定される。
アプリサーバ11は、サーバ制御装置5からアプリケーションのスレッド数と同数のリクエストを受信する。ただし、アプリケーションの各スレッドが実行状態にある場合、アプリサーバ11は、受信したリクエストを各スレッドに均等に割り振らない。このため、リクエストの割り振りに大きな偏りを生じる可能性が高い。
そこで、停止指示部23は、初期化後制御の対象となるアプリケーションの全てのスレッドの動作を停止する動作停止指示をサブマネージャ13に送信する。サブマネージャ13は、例えば、サーバ3のOSの機能を利用して、スレッド停止指示を行うことで、各スレッドの動作を停止させる。
各スレッドの動作が停止されると、各スレッドはBUSY状態になる。全てのスレッドがBUSY状態になると、アプリサーバ11は、受信したリクエストを各スレッドに均等に割り振る可能性が高くなる。
この場合、アプリサーバ11によるリクエストの割り振りが均等化されるため、未実行のスレッドが少なくなり、実行済みのスレッドが多くなる。このため、アプリケーションに対するリクエストに応じたサーバ3の応答性能低下が抑制される。従って、停止指示部23は動作停止指示をアプリサーバ11に送信する。
ただし、各スレッドの動作が停止したとしても、アプリサーバ11は、サーバ制御装置5から受信したリクエストを、全てのスレッドに対して割り振らない可能性がある。この場合、リクエストが割り振られていないスレッドが生じる。
ステップS16でYESの場合、処理は「A」に進む。「A」以降の処理について、図9のフローチャートを参照して、説明する。再開指示部26は、サブマネージャ13に対して、動作が停止している全てのスレッドの動作を再開させる動作開始指示を送信する(ステップS19)。
サブマネージャ13は、動作開始指示に応じて、各スレッドの動作を再開させる制御を行う。各スレッドのうち、リクエストが割り振られたスレッドは動作を再開する。一方、リクエストが割り振られていないスレッドは動作を再開しない。
サブマネージャ13は、例えばサーバ3のOSの機能を利用して、各スレッドのうち、動作を再開したスレッドの数(再開済みスレッド数)を認識し、再開済みスレッド数の情報をサーバ制御装置5に送信する。
これにより、サーバ制御装置5は、再開済みスレッド数の情報を取得する(ステップS20)。アプリサーバ11が全てのスレッドにリクエストを割り振っていれば、再開済みスレッド数は、アプリケーションの全スレッド数になる。
判定部25は、レスポンス数をゼロに設定する(ステップS21)。そして、判定部25は、レスポンス数が再開済みスレッド数と同じ数になったかを判定する(ステップS22)。
リクエストが割り振られたスレッドが動作を再開すると、該スレッドは実行されて、実行されたスレッドはレスポンスをサーバ制御装置5に送信する。通信部28は、レスポンスを受信する(ステップS23)。
通信部28がレスポンスを受信すると、判定部25は、レスポンス数をインクリメントする(ステップS24)。また、判定部25は、送信済みリクエスト数をデクリメントする(ステップS25)。そして、処理はステップS22に戻る。
通信部28がレスポンスを受信するごとに、ステップS23乃至ステップS25の処理が行われる。レスポンス数が再開済みスレッド数と同じ数になったと判定部25が判定した場合(ステップS22でYES)、処理は「B」に進む。
「B」以降の処理について、図10のフローチャートを参照して、説明する。主制御部21は、各スレッドのそれぞれについて実行済みであるかを示す実行状況を確認する指示(実行状況確認指示)をサブマネージャ13に送信する(ステップS26)。
サブマネージャ13は、各スレッドのそれぞれについて、実行済みであるかを確認する。サブマネージャ13は、ログ記憶部14が記憶しているログに基づいて、スレッドが実行されたかを確認してもよい。
また、サブマネージャ13は、各スレッドのCPU負荷の増分が負荷閾値を超えたかに基づいて、またはシステムコールの発行数が発行数閾値を超えたかに基づいて、スレッドが実行されたかを確認してもよい。
また、アプリサーバ11やアプリケーションが、スレッドの実行状況を確認する機能を有している場合、サブマネージャ13は該機能を利用して、スレッドが実行済みであるかを確認してもよい。
サブマネージャ13は、各スレッドの実行状況を確認し、実行済みのスレッドの数である実行済スレッド数の情報をサーバ制御装置5に送信する。これにより、サーバ制御装置5は、実行済スレッド数を取得する(ステップS27)。
主制御部21は、制御側スレッド管理テーブルの実行済スレッド数に、取得した実行済スレッド数を記憶する。判定部25は、取得された実行済みスレッド数がアプリケーションの全スレッド数に達したかを判定する(ステップS28)。
上述したように、停止指示部23が、サーバ3のアプリケーションの各スレッドの動作を停止させることで、アプリサーバ11は、受信したリクエストを多くのスレッドに割り振る。
アプリサーバ11は、全てのスレッドに対してリクエストを割り振ることもあるが、一部のスレッドに対してリクエストを割り振らないこともある。この場合、リクエストが割り振られていないスレッドが動作を再開したとしても、該スレッドは実行しない。
この場合、実行済スレッド数はアプリケーションの全スレッド数に達しない(ステップS28でNO)。実施形態では、サーバ制御装置5は、サーバ3で動作するアプリケーションの全てのスレッドを実行させる。
従って、ステップS28でNOの場合、処理は「C」からステップS14に戻る。そして、実行済スレッド数がアプリケーションの全スレッド数に達するまで、ステップS14乃至ステップS27の処理が繰り返される。
これにより、サーバ3で動作するアプリケーションの全てのスレッドが実行されるため、アプリケーションの実行速度は、該アプリケーションが初期化された直後のときよりも高速になる。このため、アプリケーションに対してリクエストが送信されたときのサーバ3の応答性能低下が抑制される。
実施形態では、サーバ制御装置5はアプリケーションの全てのスレッドを実行させるが、全てのスレッドが実行されなくてもよい。上述したように、サーバ制御装置5は、各スレッドの動作を停止させ、その後、リクエストを送信している。
このため、アプリサーバ11は、多くのスレッドに対してリクエストを割り振る。そして、リクエストが割り振られたスレッドの動作が再開するため、多くのスレッドが実行されることになる。
従って、アプリケーションに対してリクエストが送信されたときのサーバ3の応答性能低下が抑制される。
実行済みスレッド数が全スレッド数に達した場合(ステップS29でYES)、再開指示部26は、サブマネージャ13に対して、全てのスレッドを再開させる指示を送信する(ステップS29)。
上述したように、停止指示部23は、各スレッドの動作を停止させる。また、再開指示部26は、停止中のスレッドの動作を再開させる。このとき、各スレッドのうち一部のスレッドが動作を再開していない可能性がある。
そこで、ステップS29において、再開指示部26は、全てのスレッドの動作を再開させる指示をサーバ3に送信する。判定部25は、送信済みリクエスト数がゼロであるかを判定する(ステップS30)。
ステップS29の時点で、全てのスレッドの動作が再開していれば、送信済みリクエスト数はゼロになる(ステップS30でYES)。この場合、初期化後制御処理は終了する。
一方、ステップS29の時点で、一部のスレッドの動作が再開していなければ、送信済みリクエスト数はゼロではない(ステップS30でNO)。この場合、ステップS29により、スレッドの動作は再開するため、通信部28はレスポンスを受信する(ステップS31)。
通信部28がレスポンスを受信すると、主制御部21は、送信済みリクエスト数をデクリメントする(ステップS32)。ステップS31およびステップS32の処理は、送信済みリクエスト数がゼロになるまで繰り返される。
以下、サブマネージャ13が行う各処理について説明する。サブマネージャ13は、サーバ制御装置5によって制御される。従って、サブマネージャ13が行う各処理は、サーバ制御装置5の制御に基づく処理になる。
<スレッド停止処理の一例>
次に、図11のフローチャートを参照して、スレッド停止処理の一例について説明する。スレッド停止処理は、サーバ制御装置5の停止指示部23から動作停止指示に基づいて、サブマネージャ13により行われる。
サブマネージャ13は、停止済みスレッド数をゼロに設定する(ステップS40)。サブマネージャ13は、ループ回数が全スレッド数に達したかを判定する(ステップS41)。ループ回数は、ステップS42乃至ステップS46の処理を行った回数である。
サブマネージャ13は、アプリケーションの各スレッドのうち1つのスレッドを対象のスレッドに設定する。サブマネージャ13は、対象のスレッドは停止済みであるかを判定する(ステップS42)。
対象のスレッドが停止済みでなければ(ステップS42でNO)、サブマネージャ13は、対象のスレッドを停止させる(ステップS43)。サブマネージャ13は、サーバ側スレッド管理テーブルのうち、対象のスレッド状態を「停止中」に設定する(ステップS44)。
サブマネージャ13は、停止済みスレッド数をインクリメントする(ステップS45)。サブマネージャ13は、対象のスレッドを次のスレッドに設定する(ステップS46)。そして、処理はステップS41に戻る。
対象のスレッドが停止済みであった場合(ステップS42でYES)、ステップS43乃至ステップS45の処理は行われず、ステップS46の処理が行われる。ループ回数が全スレッド数に達したとき(ステップS42でYES)、スレッド停止処理は終了する。
図12は、ステップS43の処理の一例を示している。サブマネージャ13は、対象のスレッドを停止させる指示をサーバ3のOSに出力する(ステップS43−1)。サーバ3のOSは、この指示に基づいて、対象のスレッドを停止させる。スレッドを停止させる手法は、図12の例には限定されない。
<スレッド再開処理の一例>
次に、図13のフローチャートを参照して、スレッド再開処理の一例について説明する。スレッド再開処理は、サーバ制御装置5の再開指示部26から動作再開指示に基づいて、サブマネージャ13により行われる。
サブマネージャ13は、再開済みスレッド数をゼロに設定する(ステップS50)。サブマネージャ13は、ループ回数が全スレッド数に達したかを判定する(ステップS42)。ループ回数は、ステップS52乃至ステップS56の処理を行った回数である。
サブマネージャ13は、アプリケーションの各スレッドのうち1つのスレッドを対象のスレッドに設定する。サブマネージャ13は、対象のスレッドが実行済みであるかを判定する(ステップS52)。
サブマネージャ13は、サーバ側スレッド管理テーブルのうち、対象のスレッドの実行確認を参照して、該対象のスレッドが実行済みであるかを判定する。上述したように、ステップS28でNOの場合、ステップS14乃至ステップS27の処理が繰り返される。
最初にスレッド再開処理が行われる場合、アプリケーションの各スレッドに実行済みのスレッドはない。一方、2回目以降にスレッド再開処理が行われる場合、実行済みのスレッドが存在している。
対象のスレッドが実行済みでなければ(ステップS52でNO)、サブマネージャ13は、対象のスレッドを再開させる(ステップS53)。サブマネージャ13は、サーバ側スレッド管理テーブルのスレッド状態のうち対象のスレッドに設定されている「停止中」の設定をクリアする(ステップS54)。
サブマネージャ13は、再開済みスレッド数をインクリメントする(ステップS55)。サブマネージャ13は、対象のスレッドを次のスレッドに設定する(ステップS56)。そして、処理はステップS51に戻る。
対象のスレッドが実行済みであった場合(ステップS52でYES)、ステップS53乃至ステップS55の処理は行われず、ステップS56の処理が行われる。ループ回数が全スレッド数に達したとき(ステップS52でYES)、スレッド停止処理は終了する。
従って、アプリケーションの各スレッドのうち、実行済みのスレッドについては、ステップS53乃至ステップS55の処理が行われないため、サブマネージャ13が行う処理が省略される。これにより、実行済みスレッドに対しては停止状態が維持され、リクエストが処理されない状態となるため、アプリサーバが、該スレッドが高負荷状態と判断してさらなるリクエストを割り振らなくなることが期待できる。
図14は、ステップS53の処理の一例を示している。サブマネージャ13は、アプリサーバ11がログをログ記憶部14に記憶する機能(アプリサーバログ機能)を有している場合、アプリサーバログ機能を使用するかを判定する(ステップS61)。
アプリサーバログ機能は、アプリサーバ11がアプリケーションの各スレッドの実行状況をログ記憶部14に記憶する機能である。アプリサーバログ機能は、アプリサーバ11の機能である。
例えば、アプリサーバ11がアプリサーバログ機能を有していない場合、サブマネージャ13は、アプリサーバログ機能を使用しないと判定する(ステップS61でNO)。この場合、アプリサーバログ機能は使用されない。
サブマネージャ13は、アプリケーションがログをログ記憶部14に記憶する機能(アプリログ機能)を有している場合、アプリログ機能を使用するかを判定する(ステップS62)。
アプリログ機能は、アプリケーションが各スレッドの実行状況をログ記憶部14に記憶する機能である。アプリログ機能は、サーバ3で動作するアプリケーションの機能である。
例えば、アプリケーションがアプリログ機能を有していない場合、サブマネージャ13は、アプリログ機能を使用しないと判定する(ステップS62でNO)。この場合、アプリログ機能は使用されない。
ステップS62でNOの場合、アプリサーバログ機能およびアプリログ機能は使用されない。この場合、サブマネージャ13は、システムコールトレース機能を使用するかを判定する(ステップS63)。
システムコールトレース機能が使用されるか否かは、予めサブマネージャ13に設定されていてもよい。システムコールトレース機能は、システムコールが行われことをトレースする機能である。
サブマネージャ13がシステムコールトレース機能を使用しない場合(ステップS63でNO)、サブマネージャ13は、再開時点でのCPU負荷を取得する(ステップS64)。例えば、サブマネージャ13は、サーバ3のOSからCPU負荷を取得してもよい。
サブマネージャ13がシステムコールトレース機能を使用する場合(ステップS63でYES)、サブマネージャ13は、対象のスレッドにトレース機能をアタッチする(ステップS65)。これにより、システムコールトレース機能が使用される。
ステップS61でYESの場合、ステップS62でYESの場合、ステップS64が実行された場合またはステップS65が実行された場合、サブマネージャ13は、対象のスレッドを再開する指示をOSに出力する(ステップS66)。これにより、対象のスレッドは動作を再開する。
<実行状況確認処理の一例>
次に、図15のフローチャートを参照して、実行状況確認処理の一例について説明する。実行状況確認処理は、サーバ制御装置5からの実行状況確認指示に基づいて、サブマネージャ13により行われる。
サブマネージャ13は、ループ回数が全スレッド数に達したかを判定する(ステップS71)。ループ回数は、ステップS72乃至ステップS76の処理を行った回数である。
サブマネージャ13は、アプリケーションの各スレッドのうち1つのスレッドを対象のスレッドに設定する。サブマネージャ13は、対象のスレッドが実行済みであることを確認したかを判定する(ステップS72)。
サブマネージャ13が、サーバ側スレッド管理テーブルのうち、対象のスレッドの実行確認が「実行済み」でない場合(ステップS72でNO)、サブマネージャ13は、対象のスレッドの実行状況を確認する(ステップS73)。
サブマネージャ13は、対象スレッドの実行状況に基づいて、該対象スレッドが実行済みであることを確認した場合、戻り値に「YES」を設定する。一方、サブマネージャ13は、対象スレッドが実行済みでないことを確認した場合、戻り値に「NO」を設定する。
サブマネージャ13は、戻り値が「YES」であるかを判定する(ステップS74)。戻り値が「YES」の場合(ステップS74でYES)、サブマネージャ13は、サーバ側スレッド管理テーブルに「実行済み」を設定する(ステップS75)。
つまり、サブマネージャ13は、サーバ側スレッド管理テーブルのうち、対象のスレッドの実行確認の項目に「実行済み」を設定する。ステップS75の処理が実行された場合、またはステップS74でNOの場合、サブマネージャ13は、対象のスレッドを次のスレッドに設定する(ステップS76)。
ループ回数が全スレッド数に達したとき(ステップS71でYES)、実行状況確認処理は終了する。従って、アプリケーションの各スレッドのうち、実行済みのスレッドについては、ステップS72乃至ステップS76の処理が行われない。
図16は、ステップS73の処理の一例を示している。サブマネージャ13は、アプリサーバログ機能を使用するかを判定する(ステップS81)。
アプリサーバログ機能が使用される場合(ステップS81でYES)、サブマネージャ13は、ログ記憶部14に記憶されているアプリサーバログから対象スレッドの実行状況を取得する(ステップS82)。これにより、サブマネージャ13は、対象スレッドの実行状況を確認する。
アプリサーバログ機能が使用されない場合(ステップS81でNO)、サブマネージャ13は、アプリログ機能を使用するかを判定する(ステップS83)。
アプリログ機能が使用される場合(ステップS83でYES)、サブマネージャ13は、ログ記憶部14に記憶されているアプリログから対象スレッドの実行状況を取得する(ステップS84)。これにより、サブマネージャ13は、対象スレッドの実行状況を確認する。
サブマネージャ13がアプリサーバログ機能を使用する場合と、アプリログ機能を使用する場合との何れの場合も、サブマネージャ13はログ記憶部14に記憶されているログに基づいて、対象スレッドの実行状況を確認する。
そして、サブマネージャ13は、対象スレッドが実行済みであるかを判定する(ステップS85)。対象スレッドが実行済みであることをサブマネージャ13が確認した場合(ステップS85でYES)、サブマネージャ13は戻り値に「YES」を設定する(ステップS86)。
対象スレッドが実行済みでないことをサブマネージャ13が確認した場合(ステップS85でNO)、サブマネージャ13は戻り値に「NO」を設定する(ステップS87)。以上により、ログに基づく対象スレッドの実行状況の確認が行われる。
ステップS83でNOの場合、ログに基づく対象スレッドの実行状況の確認は行われない。この場合、処理は「D」に進み。「D」以降の処理について、図17のフローチャートを参照して、説明する。
サブマネージャ13は、システムコールトレース機能を使用するかを判定する(ステップS88)。システムコールトレース機能が使用されない場合(ステップS88でNO)、サブマネージャ13は、例えばサーバ3のOSの機能を利用して、現時点でのCPU負荷を取得する(ステップS89)。
ステップS64において、サブマネージャ13は、スレッドの動作が再開した時点でのCPU負荷を取得している。サブマネージャ13は、現時点でのCPU負荷からスレッドの再開時点でのCPU負荷を減じて、CPU負荷の増分を求める。
サブマネージャ13は、CPU負荷増分が負荷閾値を超えているかを判定する(ステップS90)。CPU負荷増分が負荷閾値を超えている場合(ステップS90でYES)、戻り値に「YES」を設定する(ステップS91)。
この場合、対象スレッドによるCPU負荷が増加していることから、サブマネージャ13は該対象スレッドが実行されたことが推定される。従って、戻り値は「YES」になる。
一方、CPU負荷増分が負荷閾値以下の場合(ステップS90でNO)、サブマネージャ13は、CPU負荷が増加していないか、それほど増加していないことから、対象スレッドが実行されていないことが推定される。従って、サブマネージャ13は、戻り値に「NO」を設定する(ステップS92)。
また、ステップS90の判定は、対象スレッドによりサーバ3のハードウェア資源の使用量が所定の閾値を超えているかに基づいて、行われてもよい。例えば、対象スレッドによるサーバ3のメモリの使用量が所定の閾値を超えているかに基づいて、該対象スレッドが実行されたか否かが確認されてもよい。
サブマネージャ13がシステムコールトレース機能を使用する場合(ステップS88でYES)、サブマネージャ13は、トレース機能をデタッチして、システムコール発行数をカウントする(ステップS93)。
サブマネージャ13は、システムコール発行数が発行数閾値を超えているかを判定する(ステップS94)。システムコール発行数が発行数閾値を超えている場合(ステップS94でYES)、対象スレッドが実行されたことが推定される。従って、サブマネージャ13は戻り値を「YES」に設定する(ステップS95)。
システムコール発行数が発行数閾値以下の場合(ステップS94でNO)、対象スレッドが実行されていないことが推定される。従って、サブマネージャ13は戻り値を「NO」に設定する(ステップS96)。
<全スレッド再開処理の一例>
次に、図18のフローチャートを参照して、全スレッド再開処理の一例について説明する。全スレッド再開処理は、サーバ制御装置5の再開指示部26からの指示に基づいて、サブマネージャ13により行われる。
サブマネージャ13は、ループ回数が全スレッド数に達したかを判定する(ステップS101)。ループ回数は、ステップS102乃至ステップS104の処理を行った回数である。
サブマネージャ13は、アプリケーションの各スレッドのうち1つのスレッドを対象のスレッドに設定する。サブマネージャ13は、対象のスレッドが再開済みであるかを判定する(ステップS102)。
対象のスレッドが再開済みでなければ(ステップS102でNO)、サブマネージャ13は、対象のスレッドを再開させる(ステップS103)。サブマネージャ13は、対象のスレッドを再開する指示を、サーバ3で動作するOSに出力することで、対象のスレッドを再開させる。
ステップS103が実行された場合、またはステップS102でYESの場合、サブマネージャ13は、対象のスレッドを次のスレッドに設定する(ステップS104)。ループ回数が全スレッド数に達したとき(ステップS101でYES)、全スレッド再開処理は終了する。
<サーバ制御装置のハードウェア構成の一例>
次に、図19の例を参照して、サーバ制御装置5のハードウェア構成の一例を説明する。図19の例に示すように、バス100に対して、CPU111とRAM112とROM113と補助記憶装置114と媒体接続部115と通信インタフェース116とが接続されている。
CPU111は任意の処理回路である。CPU111はRAM112に展開されたプログラムを実行する。実行されるプログラムとしては、実施形態の処理を行うサーバ制御プログラムを適用してもよい。ROM113はRAM112に展開されるプログラムを記憶する不揮発性の記憶装置である。
補助記憶装置114は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等を補助記憶装置114に適用してもよい。媒体接続部115は、可搬型記録媒体119と接続可能に設けられている。
可搬型記録媒体119としては、可搬型のメモリや光学式ディスク(例えば、Compact Disk(CD)やDigital Versatile Disk(DVD)等)を適用してもよい。この可搬型記録媒体119に実施形態の処理を行うプログラムが記録されていてもよい。
サーバ制御装置5のうち、主制御部21とスレッド数取得部22と停止指示部23とリクエスト送信部24と判定部25と再開指示部26とは、与えられたプログラムをCPU111が実行することにより実現されてもよい。
制御側テーブル記憶部27は、RAM112や補助記憶装置114等により実現されてもよい。通信部28は、通信インタフェース116により実現されてもよい。
RAM112、ROM113、補助記憶装置114および可搬型記録媒体119は、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
<その他>
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
1 システム
2 クライアント
3 サーバ
5 サーバ制御装置
11 アプリサーバ
12 実行部
13 サブマネージャ
14 ログ記憶部
15 サーバ側テーブル記憶部
21 主制御部
22 スレッド数取得部
23 停止指示部
24 リクエスト送信部
25 判定部
26 再開指示部
27 制御側テーブル記憶部
28 通信部
111 プロセッサ
112 RAM
113 ROM

Claims (8)

  1. サーバで実行されるアプリケーションプログラムの初期化が完了した旨の通知に応じて、前記サーバが実行する前記アプリケーションプログラムの実行単位の数を取得し、
    前記サーバで実行される全ての前記実行単位の動作を停止する指示を送信し、
    取得された前記実行単位の数と少なくとも同数のリクエストを前記サーバに送信し、
    停止された前記全ての実行単位の動作を再開させる指示を前記サーバに送信する、
    処理をコンピュータに実行させるためのサーバ制御プログラム。
  2. 前記サーバから前記リクエストに応じたレスポンスを受信し、
    受信した前記レスポンスの数と送信した前記リクエストの数とに基づいて、前記全ての実行単位が前記リクエストに応じて実行したかを判定する、
    処理をさらに前記コンピュータに実行させるための請求項1記載のサーバ制御プログラム。
  3. 前記全ての実行単位が実行されていないと判定された場合、前記全ての実行単位が前記リクエストを実行するまで、前記実行単位を停止する指示を送信し、前記リクエストを前記サーバに送信し、前記再開させる指示を前記サーバに送信する、
    処理をさらに前記コンピュータに実行させるための請求項2記載のサーバ制御プログラム。
  4. 前記実行単位のうち、実行済みの実行単位を除外した実行単位の動作を再開させる指示を前記サーバに送信する、
    処理をさらに前記コンピュータに実行させるための請求項3記載のサーバ制御プログラム。
  5. 前記サーバのハードウェア資源の使用量の増分が所定の閾値を超えたかに基づいて、前記実行単位が実行されたかを判定する、
    処理をさらに前記コンピュータに実行させるための請求項1乃至4のうち何れか1項に記載のサーバ制御プログラム。
  6. 前記サーバが発行したシステムコールの発行数が所定の閾値を超えたかに基づいて、前記実行単位が実行されたかを判定する、
    処理をさらに前記コンピュータに実行させるための請求項1乃至4のうち何れか1項に記載のサーバ制御プログラム。
  7. サーバで実行されるアプリケーションプログラムの初期化が完了した旨の通知に応じて、前記サーバが実行する前記アプリケーションプログラムの実行単位の数を取得し、
    前記サーバで実行される全ての前記実行単位の動作を停止する指示を送信し、
    取得された前記実行単位の数と少なくとも同数のリクエストを前記サーバに送信し、
    停止された前記全ての実行単位の動作を再開させる指示を前記サーバに送信する、
    処理をコンピュータが実行するサーバ制御方法。
  8. サーバで実行されるアプリケーションプログラムの初期化が完了した旨の通知に応じて、前記サーバが実行する前記アプリケーションプログラムの実行単位の数を取得する取得部と、
    前記サーバで実行される全ての前記実行単位の動作を停止する指示を送信する停止指示部と、
    取得された前記実行単位の数と少なくとも同数のリクエストを前記サーバに送信する送信部と、
    前記送信部が前記リクエストを送信した後に、停止された前記全ての実行単位の動作を再開させる指示を前記サーバに送信する再開指示部と、
    を備えるサーバ制御装置。
JP2015159333A 2015-08-12 2015-08-12 サーバ制御プログラム、サーバ制御方法およびサーバ制御装置 Pending JP2017037539A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015159333A JP2017037539A (ja) 2015-08-12 2015-08-12 サーバ制御プログラム、サーバ制御方法およびサーバ制御装置
US15/214,740 US20170048307A1 (en) 2015-08-12 2016-07-20 Apparatus and method to perform post-initialization control on applications in a server

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015159333A JP2017037539A (ja) 2015-08-12 2015-08-12 サーバ制御プログラム、サーバ制御方法およびサーバ制御装置

Publications (1)

Publication Number Publication Date
JP2017037539A true JP2017037539A (ja) 2017-02-16

Family

ID=57994827

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015159333A Pending JP2017037539A (ja) 2015-08-12 2015-08-12 サーバ制御プログラム、サーバ制御方法およびサーバ制御装置

Country Status (2)

Country Link
US (1) US20170048307A1 (ja)
JP (1) JP2017037539A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108429780B (zh) * 2017-06-25 2021-05-07 平安科技(深圳)有限公司 关联系统间的数据调用系统及方法
CN115237644B (zh) * 2022-06-16 2024-04-23 广州汽车集团股份有限公司 系统故障处理方法、中央运算单元以及车辆

Also Published As

Publication number Publication date
US20170048307A1 (en) 2017-02-16

Similar Documents

Publication Publication Date Title
US11340926B2 (en) Hypervisor remedial action for a virtual machine in response to an error message from the virtual machine
US10609159B2 (en) Providing higher workload resiliency in clustered systems based on health heuristics
US10509680B2 (en) Methods, systems and apparatus to perform a workflow in a software defined data center
US9213572B2 (en) Interdependent virtual machine management
US8065560B1 (en) Method and apparatus for achieving high availability for applications and optimizing power consumption within a datacenter
JP6186787B2 (ja) データ転送装置、データ転送システム、データ転送方法及びプログラム
WO2012056596A1 (ja) 計算機システム及び処理制御方法
US11507479B2 (en) High availability for a relational database management system as a service in a cloud platform
WO2018003031A1 (ja) 仮想化管理プログラム、仮想化管理装置および仮想化管理方法
WO2017193964A1 (zh) 一种组件升级方法、装置和系统
US7861108B2 (en) Restoring user states in dynamic computing environments
JP2017037539A (ja) サーバ制御プログラム、サーバ制御方法およびサーバ制御装置
US10193744B1 (en) Mass restoration of enterprise business services following service disruption
US10789129B1 (en) Rolling restoration of enterprise business services following service disruption
JP6488910B2 (ja) 制御方法、制御プログラム、及び情報処理装置
US10855521B2 (en) Efficient replacement of clients running large scale applications
JP6311282B2 (ja) 起動制御プログラム、装置、及び方法
WO2022009438A1 (ja) サーバメンテナンス制御装置、システム、制御方法及びプログラム
JP6349786B2 (ja) 仮想計算機管理装置、仮想計算機管理方法、及び仮想計算機管理プログラム
JP6119302B2 (ja) 排他制御装置、排他制御方法、排他制御システムおよびプログラム
JP2019082912A (ja) 情報処理装置及び構成要素の管理方法
WO2008007435A1 (fr) Programme de gestion de ressources, procédé de gestion de ressources et dispositif de gestion de ressources
CN116319758A (zh) 数据迁移方法、装置、电子设备及可读存储介质
US20170337087A1 (en) System and methodology for implementing the safe de-provisioning of pooled cloud resources
JP2019164405A (ja) 管理ノードおよびノード制御方法