JP6548379B2 - 情報処理装置およびその制御方法、並びにプログラム - Google Patents

情報処理装置およびその制御方法、並びにプログラム Download PDF

Info

Publication number
JP6548379B2
JP6548379B2 JP2014216634A JP2014216634A JP6548379B2 JP 6548379 B2 JP6548379 B2 JP 6548379B2 JP 2014216634 A JP2014216634 A JP 2014216634A JP 2014216634 A JP2014216634 A JP 2014216634A JP 6548379 B2 JP6548379 B2 JP 6548379B2
Authority
JP
Japan
Prior art keywords
application
byte code
unit
executed
aggregation
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.)
Active
Application number
JP2014216634A
Other languages
English (en)
Other versions
JP2016085537A5 (ja
JP2016085537A (ja
Inventor
極 長谷川
極 長谷川
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP2014216634A priority Critical patent/JP6548379B2/ja
Priority to US14/876,130 priority patent/US10089211B2/en
Publication of JP2016085537A publication Critical patent/JP2016085537A/ja
Publication of JP2016085537A5 publication Critical patent/JP2016085537A5/ja
Application granted granted Critical
Publication of JP6548379B2 publication Critical patent/JP6548379B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。特に、単一のプロセス上で複数のアプリケーションを動作させる情報処理装置における資源管理技術に関する。
情報処理装置の1つであるMFP(Multi Function Peripheral)には、ドキュメントのコピーやスキャン、印刷などの機能を実現するアプリケーションを動作させることができる。このようなアプリケーションは、CPUやメモリの使用量を抑えるため、MFPでは同じプロセス上で実行することが多い。1つのプロセス上で使用する全体のメモリ量は知ることができるため、1つのアプリケーションしか実行しない場合は、アプリケーションのメモリ使用量も知ることができる。しかし、単一のプロセス上で複数のアプリケーションを実行する場合、プロセス全体のメモリ使用量しか知ることができないので、アプリケーション毎のメモリ使用量を知ることは困難である。
例えば、使用するヒープメモリの内容をダンプし(以後、ヒープダンプ)、MFP以外の情報処理装置上で解析すれば、アプリケーション毎のメモリ使用量を計測できる。また、アプリケーションを修正し、1つ1つのアプリケーションがメモリ計測を行えば、MFP上でも、アプリケーション毎のメモリ使用量を計測できる。しかし、既存のアプリケーションの構成を修正せずには、メモリ計測が行えない。
一方、既存のアプリケーションを修正せずに、パフォーマンスの解析を行う方法として、特許文献1のような技術がある。特許文献1が示す方法では、既存のアプリケーションがロードするクラスのバイトコードを監視して、実行されるメソッドを動的に特定し、実行時間を計測することで、実行中のアプリケーションのパフォーマンスを解析できる。
特開2011−238233号公報
しかしながら、特許文献1の方法では、アプリケーションが使用するメモリを解析することができない。
本発明は、上記の問題点に鑑み、単一のプロセス上で複数のアプリケーションを動作させる情報処理装置において、既存のアプリケーションでも、アプリケーション毎のメモリ使用量を情報処理装置上で計測可能にすることを目的とする。
上記課題を解決するために本願発明は以下の構成を有する。すなわち、クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションを備えた情報処理装置であって、前記複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計手段と、前記オブジェクトは前記集計手段による前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定手段と、前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入手段とを備え、前記挿入手段にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、前記集計手段は、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量を集計し、前記挿入手段は、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードを、新たなオブジェクトのクラスファイルに挿入し、前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象として、前記アプリケーションの処理が実行される。
本発明により、単一のプロセス上で複数のアプリケーションを動作させる情報処理装置において、既存のアプリケーションでも、アプリケーション毎のメモリ使用量を情報処理装置上で計測できる。
本願発明に係る情報処理装置のハードウェアの構成例を示す図。 本願発明に係る情報処理システム全体のソフトウェアの構成例を示す図。 第一の実施形態に係るソフトウェアの構成例を示す図。 ソフトウェアによりバイトコードを挿入する際の流れを説明するための図。 操作パネルが表示する画面の一例を示す図。 オブジェクト管理テーブルにオブジェクトを追加する例を説明するための図。 第一の実施形態に係るアプリケーションをインストールする際のフローチャート。 第一の実施形態に係るアプリケーションを開始する際のフローチャート。 第一の実施形態に係るオブジェクト集計処理のフローチャート。 第二の実施形態に係るアプリケーションメモリ管理部の構成例を示す図。 第二の実施形態に係るアプリケーションを開始する際のフローチャート。 第二の実施形態に係る処理のフローチャート。 第二の実施形態に係る処理のフローチャート。 第三の実施形態に係るアプリケーションメモリ管理部の構成例を示す図。 第三の実施形態に係るアプリケーションをインストールする際のフローチャート。 第三の実施形態に係るオブジェクト集計処理のフローチャート。 第四の実施形態に係るアプリケーションを開始する際のフローチャート。 第四の実施形態に係る集計処理のフローチャート。
以下、本発明を実施するための形態について図面を用いて説明する。
<第一の実施形態>
[ハードウェア構成]
本発明の第一の実施形態について説明する。図1は、本発明の各実施形態に共通する情報処理装置を収容するハードウェア構成の一例である。
情報処理装置100は、コントローラユニット101、スキャナ112、プリンタ113、および操作パネル114を備える。コントローラユニット101は、バス117、118を介して、スキャナ112、プリンタ113とそれぞれ接続される。
CPU102は、情報処理装置100のソフトウェアプログラムを実行し、装置全体の制御を行う。ROM103は、リードオンリーメモリであり、装置のブートプログラムや固定パラメータ等が格納されている。RAM104は、ランダムアクセスメモリであり、CPU102が装置を制御する際に、一時的なデータの格納などに使用する。外部記憶装置105は、インストールされたアプリケーションやアプリケーションのデータや印刷データの格納など、様々なデータの格納に使用する。USBH I/F制御部106はUSBホストインタフェースを制御するためのものであり、さまざまなUSBデバイスとの通信を制御する。
スキャナI/F制御部107は、バス117を介してスキャナ112に接続され、スキャナ112の制御を行う。プリンタI/F制御部108は、バス118を介してプリンタ113に接続され、プリンタ113の制御を行う。NVRAM109は、不揮発性のメモリであり、アプリケーション管理装置の各種設定値が保存される。パネル制御部110は、操作パネル114を制御し、各種情報の表示、ユーザからの指示入力を行う。ネットワークI/F制御部111は、ネットワーク116とのデータの送受信を制御する。ネットワーク116は、情報処理装置100以外の情報処理装置120とも接続されている。この情報処理装置120はネットワーク116を介して、印刷ジョブの送信や、情報処理装置100上で動くアプリケーションの起動、停止、インストール、アンインストールを情報処理装置100に命令することができる。
バス115は、CPU102、ROM103、RAM104、外部記憶装置105、およびUSBH I/F制御部106が接続される。また、バス115は、スキャナI/F制御部107、プリンタI/F制御部108、NVRAM109、パネル制御部110、およびネットワークI/F制御部111とも接続される。バス115は、CPU102からの制御信号や各装置間のデータ信号が送受信されるシステムバスである。
[ソフトウェア構成]
図2は、本発明の各実施形態に共通する情報処理システム全体のソフトウェアの構成例を説明するための図である。図2は、情報処理装置100のCPU102やRAM104、あるいは外部記憶装置105などの各ハードウェア上で動作するソフトウェアの構成例を表す。なお、これらの各モジュールにおける処理は、CPU102の命令により、ROM103や外部記憶装置105に格納されているプログラムを読み出し、RAM104をワークエリアとして所定の処理を実行することで実現する。また、所定の処理を実行することで生成される全ての情報は、RAM104もしくは外部記憶装置105に格納する。なお、このような各モジュールにおける処理は、以降でも同様であるため、以降では記載を省略する。
図2に示すソフトウェア構成は説明の便宜上、階層構造で表現されているが、必ずしも上位層と下位層が明確になっているわけではなく、機能によっては並列な関係をとりうる。つまり、本発明のソフトウェア構造の様態は、この形式に限定されるものではない。
OS(Operating System)200は、プロセスの管理、メモリ管理、入出力管理を実行する。Nativeアプリ201は、コピー等、機器の基本的な機能を実現するプログラムである。Javaソフト部202は、JavaVM203、アプリケーションプラットフォーム204、アプリケーションA205、アプリケーションB206、およびJavaエージェント208から構成される。
JavaVM203は、Javaプログラムを実行する仮想マシンである。アプリケーションプラットフォーム204は、単一のJavaVM203上で少なくとも一つ以上のアプリケーションプログラムの起動、停止、インストール、アンインストールといったアプリケーションのライフサイクルの管理を行うプログラムである。
アプリケーションA205、アプリケーションB206は、アプリケーションプラットフォーム204上で動作するアプリケーションプログラムである。アプリケーションプラットフォーム204、アプリケーションA205、およびアプリケーションB206は、JavaVM203から一つのJavaアプリケーション207として処理される。Javaエージェント208は、JavaVM203によってロードされ、アプリケーションプラットフォーム204がロードするクラスの監視等を行う。
図3は、Javaソフト部202を構成するモジュールの一例を示す。JavaVM203は、バイトコード実行部301、ヒープメモリ303、およびシステムクラスローダ304を備える。
バイトコード実行部301は、Java(登録商標)のプログラムコードであるバイトコードを解釈し、実行する。オブジェクト生成部302は、バイトコード実行部301で実行されるプログラムコードの指示に従い、クラスをインスタンス化してJavaオブジェクトを生成する。ヒープメモリ303は、JavaVM203が管理するメモリ領域であり、Javaプログラムの実行によって生成されたJavaオブジェクトを保持する。システムクラスローダ304は、JavaVM203の管理するクラスのロードを行う。JavaVM203の管理するクラスにはアプリケーションプラットフォーム204とJavaエージェント208も含まれる。
アプリケーションプラットフォーム204は、アプリケーション管理部305、アプリケーションメモリ管理部306、およびアプリ用クラスローダ管理部308を備える。アプリケーション管理部305は、アプリケーションの起動、停止、インストール、アンインストールといったアプリケーションのライフサイクルの管理を行う。アプリケーションメモリ管理部306は、アプリケーション毎にオブジェクト管理テーブル307の生成およびその管理を行い、アプリケーション毎のメモリ使用量(記憶領域に対する消費量)を管理する。オブジェクト管理テーブル307は、各アプリケーションに対応付けて生成されて記憶部に保持され、アプリケーションが生成するJavaオブジェクトを管理する。
アプリ用クラスローダ管理部308は、アプリ用クラスローダ管理テーブル309を備え、アプリケーション毎のアプリ用クラスローダ310の管理を行う。そのため、アプリケーションを情報処理装置100の外部記憶装置105にインストールする時、システムクラスローダ304は、アプリ用クラスローダ310のクラスをロードして、アプリ用クラスローダ310を生成する。アプリ用クラスローダ310は、外部記憶装置105に記憶されているアプリケーションAクラスファイル311からクラスファイルを読み込み、クラスのロードを行う。
Javaエージェント208は、クラスロード監視部313とバイトコード挿入部312を備える。クラスロード監視部313は、システムクラスローダ304がクラスファイルを取得するのを検知し、バイトコード挿入部312を実行する。バイトコード挿入部312は、システムクラスローダ304が取得したクラスファイルのバイトコードに、さらにバイトコードを挿入して、新しいクラスファイルに変換する。つまり、バイトコード実行部301は、この新しいクラスファイルのバイトコードを解釈し、実行する。
表1は、オブジェクト管理テーブル307の構成例を示す。オブジェクト管理テーブル307は、生成オブジェクトとメモリ使用量とを対として管理する。オブジェクト管理テーブル307は、アプリケーションメモリ管理部306によってアプリケーション毎に生成される。生成オブジェクトは、アプリケーションが生成するJavaオブジェクトを参照する。メモリ使用量は、生成オブジェクトが使用しているメモリのサイズである。
Figure 0006548379
表2は、アプリ用クラスローダ管理テーブル309の構成例を示す。アプリ用クラスローダ管理テーブル309は、アプリケーションの識別子であるアプリケーションIDとそのアプリケーションが使用するアプリ用クラスローダ310とを対として管理する。
Figure 0006548379
[処理概要]
図4は、クラスXのクラスファイル401に含まれるJavaオブジェクトを生成するバイトコードの後に、バイトコード挿入部312がオブジェクト管理テーブル生成処理を実行するバイトコードを新しく挿入する場合の一例を示す。
外部記憶装置105に記憶しているクラスXのクラスファイル401のバイトコード402は、オブジェクト生成時に実行する処理のバイトコードである。以降、バイトコード挿入部312がバイトコードを挿入する前の、クラスファイルのバイトコードを「オリジナルのバイトコード」と呼ぶ。クラスXのクラスファイル401がシステムクラスローダ304に読み込まれると、クラスロード監視部313がそれを検知する。その後、バイトコード挿入部312は、オリジナルのバイトコードの後に、オブジェクト管理テーブル生成処理を実行するバイトコードを新しく挿入する。そして、バイトコード挿入部312は、オリジナルのバイトコードと挿入後のバイトコード403をバイトコード実行部301に渡す。このバイトコードを挿入する処理により、外部記憶装置105にあるクラスXのクラスファイル401に変化はない。しかし、バイトコード実行部301は、オブジェクト管理テーブル生成処理を含むクラスファイルとしてバイトコード404を解釈し、実行する。オブジェクト生成部302は、バイトコード実行部301が実行する命令に従い、クラスXをインスタンス化してJavaオブジェクトx405を生成し、ヒープメモリ303に記憶させる。そして、オブジェクト生成時の処理を実行した後、オブジェクト生成部302は、アプリケーションメモリ管理部306にオブジェクト管理テーブル307を生成させる。
次に本実施形態のメモリ使用量の計測を行う処理の流れについて、例を用いて簡単に説明する。
図5は、操作パネル114が表示する画面の一例を示す図である。操作パネル114の画面には、アプリケーションA205を実行するためのアプリアイコン501が表示されている。ユーザが操作パネル114のアプリアイコン501を選択すると、パネル制御部110がそれを検知して、CPU102にアプリケーションA205を実行するように指示する。アプリケーションA205が実行されると、アプリケーションA205は、オブジェクト生成部302にクラスをインスタンス化してJavaオブジェクトを生成するように命令する。アプリケーションメモリ管理部306は、オブジェクト生成部302がJavaオブジェクトを生成した後に、アプリケーションメモリ管理部306にあるオブジェクト管理テーブル307に生成したJavaオブジェクトを追加する。
生成したJavaオブジェクトを追加する様子を図6に示す。例として、アプリケーションA205の実行中に、クラスA601をインスタンス化して、objectA001、objectA002、・・・、objectA100というJavaオブジェクトを順に生成するものとする。ここで、クラスA601は変数valやメソッドfoo()が定義されており、objectA001やobjectA002などを生成する際には、これらの変数やメソッドも定義される。図6(a)に示すように、オブジェクト生成部302は、クラスA601をインスタンス化してobjectA001を生成する。そして、オブジェクト生成部302は、objectA001をアプリケーションメモリ管理部306に渡す。
アプリケーションメモリ管理部306は、objectA001を受け取ると、objectA001に関する情報をオブジェクト管理テーブル307に追加する。同様に、objectA002が生成されると、objectA002に関する情報がオブジェクト管理テーブル307に追加され、図6(b)に示すようになる。このようにして、アプリケーションA205の実行中に、生成したJavaオブジェクトの情報をオブジェクト管理テーブル307に追加する。そして、アプリケーションメモリ管理部306は、オブジェクト管理テーブル307に含まれるJavaオブジェクトのメモリ使用量を集計する。図6(c)は、メモリ使用量を集計した結果を示す。アプリケーション管理部305は、このメモリ使用量の集計結果を参照することにより、アプリケーション実行中にアプリケーションA205のメモリ使用量を取得することができる。
[処理フロー]
次に本実施形態の処理の流れについて、図7〜図9を用いて説明する。
(アプリケーションインストール処理)
図7は、アプリケーションプラットフォーム204のアプリケーション管理部305がアプリケーションA205をインストールする際の処理を示すフローチャートである。本フローチャートは、CPU102が外部記憶装置105等に格納されたプログラムを読み出して実行することにより、各処理主体の部位として機能させることで実現する。
S701にて、情報処理装置120がアプリケーションA205のインストールを命令すると、ネットワーク116を介して、ネットワークI/F制御部111がその命令を受けとり、CPU102にアプリケーションA205のインストールを命令する。CPU102がアプリケーションA205のインストール命令を受けると、アプリケーション管理部305はアプリケーションA205のインストールを開始する。
アプリケーションA205のインストールを開始すると、S702にて、アプリ用クラスローダ管理部308は、アプリケーションA205のアプリ用クラスローダ310をアプリ用クラスローダ管理テーブル309に追加する。この時、アプリケーションA205のアプリ用クラスローダ310がまだロードされていないため、システムクラスローダ304は、外部記憶装置105にあるアプリ用クラスローダ310のクラスファイルを読み込む。
S703にて、クラスロード監視部313は、S702のクラスファイル読込を検知して、バイトコード挿入部312にバイトコードの挿入命令を送る。バイトコード挿入部312は、アプリ用クラスローダ310のクラスファイルにあるJavaオブジェクトを生成する処理のバイトコードの後に、オブジェクト管理テーブル生成処理のバイトコードを挿入する。このオブジェクト管理テーブル生成処理は、オブジェクト生成部302がS708を実行する処理である。なお、オブジェクト管理テーブル生成処理のバイトコードは、Javaオブジェクトを生成する処理のバイトコードの前に挿入されても良い。バイトコード挿入部312がバイトコードを挿入し終えると、S704に進む。
S704にて、バイトコード実行部301は、バイトコード挿入部312から渡されるバイトコードを解釈して実行する。
S705にて、オブジェクト生成部302は、S704で実行される命令に従い、アプリ用クラスローダ310のクラスをインスタンス化してJavaオブジェクトを生成する。
S706にて、オブジェクト生成部302は、アプリ用クラスローダ310のクラスファイルに含まれるJavaオブジェクト生成時の処理を実行する。
S707にて、オブジェクト生成部302は、オブジェクト管理テーブル生成処理を実行する。なお、S703においてJavaオブジェクトを生成する処理のバイトコードの前にオブジェクト管理テーブル生成処理のバイトコードを挿入した場合は、S707、S706の順で処理が実行される。
S708にて、アプリケーションメモリ管理部306は、アプリケーションA205のオブジェクト管理テーブル307を生成する。この時、オブジェクト生成部302は、生成したアプリ用クラスローダ310をアプリケーションメモリ管理部306に渡す。アプリケーションメモリ管理部306は、渡されたアプリ用クラスローダ310に対応するオブジェクト管理テーブル307を生成する。アプリ用クラスローダ310をインスタンス化したJavaオブジェクトは、アプリケーション毎に生成される。そのため、アプリ用クラスローダ310とオブジェクト管理テーブル307とが一対一に対応していれば、実質上は、オブジェクト管理テーブル307がアプリケーション毎に生成されることになる。
S709にて、アプリケーション管理部305は、アプリ用クラスローダ310の生成以外の他のインストール処理を実行する。他のインストール処理には、例えば、アプリ用クラスローダ管理部308が、アプリ用クラスローダ管理テーブル309に、アプリケーションIDとアプリ用クラスローダを追加する処理などがある。
S710にて、アプリケーション管理部305は、アプリケーションA205のインストールを終了する。
(アプリケーション実行処理)
次に、インストールしたアプリケーションA205を起動する場合について説明する。アプリケーションA205の起動は、ユーザが情報処理装置120から起動を命令すると、ネットワーク116を介して、ネットワークI/F制御部がその命令を受けとり、CPU102にアプリケーションA205の起動を命令する。CPU102がアプリケーションA205の起動命令を受けると、アプリケーション管理部305はアプリケーションA205を起動する。アプリケーションA205が起動されると、パネル制御部110が操作パネル114にアプリケーションA205のアプリアイコン501を表示する。ユーザはこのアプリアイコン501を選択することにより、アプリケーションA205を実行させる。
図8は、インストールしたアプリケーションA205を実行開始して終了するまでの処理を示すフローチャートである。本フローチャートは、CPU102が外部記憶装置105等に格納されたプログラムを読み出して実行することにより、各処理主体の部位として機能させることで実現する。
S801にて、ユーザが操作パネル114にあるアプリケーションA205のアプリアイコン501を選択する。アプリアイコン501が選択されると、ネットワーク116を介して、ネットワークI/F制御部111がその命令を受けとり、CPU102にアプリケーションA205の処理を実行開始するように命令する。そして、アプリケーションA205は、アプリケーションA205の処理を実行開始する。
S802にて、アプリケーションA205は、処理の実行中に、クラスをインスタンス化してJavaオブジェクトを生成するか否かを判定する。Javaオブジェクトを生成する場合は(S802にてYES)S803に進み、Javaオブジェクトを生成しない場合は(S802にてNO)S810に進む。
S803にて、アプリ用クラスローダ310は、Javaオブジェクトを生成する前に、そのJavaオブジェクトのクラスがロードされているか否かを判定する。クラスがロードされている場合は(S803にてYES)S806に進み、クラスがロードされていない場合は(S803にてNO)S804に進む。
S804にて、生成するJavaオブジェクトのクラスがロードされていない場合、アプリ用クラスローダ310は、そのクラスのロードを行う。アプリ用クラスローダ310は、外部記憶装置105にあるアプリケーションAクラスファイル311からクラスファイルを読み込む。
S805にて、クラスロード監視部313は、S804のクラスファイル読込を検知すると、バイトコード挿入部312にバイトコードの挿入命令を送る。バイトコード挿入部312は、クラスファイルにあるJavaオブジェクトを生成する処理のバイトコードの後に、オブジェクト集計処理のバイトコードを挿入する。オブジェクト集計処理は、オブジェクト生成部302がS809にて実行する処理である。なお、オブジェクト集計処理を実行するバイトコードは、Javaオブジェクトを生成する処理のバイトコードの前に挿入されても良い。バイトコード挿入部312がバイトコードを挿入し終えると、クラスのロードが終わり、S806に進む。
S806にて、バイトコード実行部301は、バイトコード挿入部312に渡されるバイトコードを解釈して実行する。
S807にて、オブジェクト生成部302は、S806で実行される命令に従い、クラスをインスタンス化してJavaオブジェクトを生成する。
S808にて、オブジェクト生成部302は、クラスファイルに含まれるJavaオブジェクト生成時の処理を実行する。
S809にて、でオブジェクト生成部302は、オブジェクト集計処理を実行する。なお、S805でJavaオブジェクトを生成する処理のバイトコードの前にオブジェクト集計処理のバイトコードを挿入した場合は、S809、S808の順で処理が実行される。オブジェクト集計処理の実行が終了すると、S810に進む。
S810にて、アプリケーションA205は、処理が終了したか否かを判定する。処理を終了していない場合は(S810にてNO)S802に進み、終了した場合は(S810にてYES)S811に進む。
S811にて、アプリケーションA205は、処理を終了する。
次に、S801〜S811の流れを具体的に説明する。例として、アプリケーションA205は次の3つの処理を実行するアプリケーションとする。1つ目の処理で、クラスA601をインスタンス化したobjectA001を生成する。ここでは、クラスA601はまだアプリ用クラスローダ310にロードされていないとする。2つ目の処理で、クラスA601をインスタンス化したobjectA002を生成する。3つ目の処理で、objectA001にある変数valの値を“0”にする(val=0)。
ユーザが操作パネル114に表示されているアプリアイコン501を選択すると、CPU102はアプリケーションA205の処理を実行する。1つ目の処理で、アプリケーションA205がobjectA001を生成するので、S802はYesになる。1つ目の処理では、まだクラスA601がロードされていないので、S803はNoになり、アプリ用クラスローダ310はクラスA601をロードする。クラスA601をロードする時、バイトコード挿入部312は、クラスA601のバイトコードにオブジェクト集計処理のバイトコードを挿入する。バイトコードを挿入した後、クラスのロードを終了すると、オブジェクト生成部302はobjectA001を生成し、オブジェクト集計処理を実行する。オブジェクト集計処理が終了した後、まだアプリケーションA205の処理は終わっていないため、S810はNoになり、アプリケーションA205は2つ目の処理を実行する。2つ目の処理で、アプリケーションA205がobjectA002を生成するので、S802はYesになる。1つ目の処理ですでにクラスA601をロードしているので、S803はYesになり、オブジェクト生成部302がobjectA002を生成する。1つ目の処理で、クラスA601にはオブジェクト集計処理のバイトコードが挿入されているので、オブジェクト生成部302はオブジェクト集計処理を実行する。オブジェクト集計処理が終了した後、まだアプリケーションA205の処理は終わっていないので、S810はNoになり、アプリケーションA205は3つ目の処理を実行する。3つ目の処理で、アプリケーションA205はJavaオブジェクトを生成しないので、S802はNoになる。そして、アプリケーションA205の処理が全て終了するので、S810はYesになる。S810はYesになると、アプリケーションA205は処理の実行を終了する。
(オブジェクト集計処理)
図9は、S809でオブジェクト生成部302がオブジェクト集計処理を実行する際の処理を示すフローチャートである。本フローチャートは、CPU102が外部記憶装置105等に格納されたプログラムを読み出して実行することにより、各処理主体の部位として機能させることで実現する。
S901にて、オブジェクト生成部302は、オブジェクト集計処理を実行開始する。
S902にて、アプリケーションA205は、S807で生成されたJavaオブジェクトがどのアプリケーションの処理から生成されたかを識別する。
S903にて、アプリケーションメモリ管理部306は、S902で識別されたアプリケーション用のオブジェクト管理テーブル307に、S807で生成されたJavaオブジェクトを追加する。
S904にて、アプリケーションメモリ管理部306は、オブジェクト管理テーブル307に格納されているメモリ使用量を集計する。
S905にて、オブジェクト生成部302は、オブジェクト集計処理の実行を終了する。
以上、本実施形態では、アプリケーションA205の実行中に、バイトコード挿入部312が、アプリケーション単体のメモリ使用量を計測するためのバイトコードを挿入する。そして、アプリケーションがJavaオブジェクトを生成すると、オブジェクト生成部302は挿入したバイトコードの処理も実行し、アプリケーションメモリ管理部306がアプリケーション毎のメモリ使用量を計測する。
アプリケーション毎のメモリ使用量を計測することが可能となることにより、例えば次のようなことが可能となる。開発者が既存のアプリケーション(例えば、JavaVM)に修正を加えずに、アプリケーション毎のメモリ使用量を、アプリケーション実行中に情報処理装置上で計測することができる。そして、情報処理装置上でメモリ計測が行えるため、アプリケーションが最大メモリ使用量などを宣言している場合、宣言しているメモリ使用量と計測値したメモリ使用量を比較して、メモリリークを起こしているアプリケーションを特定することができる。そのため、システム全体が停止する前にメモリリークを起こしているアプリケーションを特定し、停止できるようになり、システムの堅牢性を向上することができる。
<第二の実施形態>
本発明の第二の実施形態について説明する。第一の実施形態では、アプリケーションA205の処理の実行中に、Javaオブジェクトを生成した場合に、オブジェクト集計処理を実行していた。しかし、オブジェクト集計処理の実行中(S809、S901〜S905)にアプリケーションA205あるいはアプリケーションメモリ管理部306がJavaオブジェクトを生成すると、再度、オブジェクト集計処理を実行してしまう。この場合、2度目のオブジェクト集計処理の実行中にまたJavaオブジェクトを生成すると、またオブジェクト集計処理を実行(S809、S901〜S905)してしまう。つまり、Javaオブジェクトの生成とオブジェクト集計処理の繰り返しになってしまい、アプリケーションA205の処理が進まなくなるという問題がある。
そこで本実施形態では、オブジェクト集計処理の実行中か否かを、アプリケーションメモリ管理部306が判定する処理を行う。そして、オブジェクト集計処理が実行中の場合、生成するJavaオブジェクトをオブジェクト管理テーブル307に追加しない構成とする。以降、第一の実施形態と異なる点のみを図10〜図13を用いて説明する。なお、以降では、オブジェクト生成処理の実行中に生成するJavaオブジェクトのクラスを「特別クラス」と呼ぶ。
[ソフトウェア構成]
図10は、第二の実施形態のアプリケーションメモリ管理部306が特別クラスフラグ1001を管理するソフトウェア構成例を示す。特別クラスフラグ1001は、オブジェクト集計処理の実行中であるか否かを判定するためのフラグである。特別クラスフラグ1001は、基本的には「FALSE」であるが、オブジェクト集計処理を実行している間は「TRUE」になる。
[処理フロー]
図11は、本実施形態に係る処理フローであり、図8にて示した処理フローに対し、S805とS806の間に、S1101とS1102を加えている。
S1101にて、クラスロード監視部313は、S805のオブジェクト集計処理のバイトコードを挿入した後、ロードするクラスが特別クラスか否かを判定する。特別クラスである場合は(S1101にてYES)、S1102に進み、特別クラスでない場合は(S1101にてNO)、S806に進む。
S1102にて、バイトコード挿入部312は、特別クラスのクラスファイルに含まれるJavaオブジェクトを生成する処理のバイトコードの後に、特別クラス対策処理のバイトコードを挿入する。特別クラス対策処理は簡単に説明すると、オブジェクト生成部302が特別クラスフラグ1001を判定し、判定結果に応じてオブジェクト集計処理を繰り返さないように制御する処理である。特別クラス対策処理のバイトコードが挿入されると、S806に進む。
クラスファイルの処理の後(S808)、S1103にて、オブジェクト生成部302は、S1102の特別クラス対策処理のバイトコードが挿入されると、第一の実施形態のS809の代わりにオブジェクト集計処理と特別クラス対策処理を実行する。S1103が終了すると、S810に進む。
図12は、S1103における、オブジェクト生成部302がオブジェクト集計処理と特別クラス対策処理を実行する際のフローチャートである。
S1201にて、オブジェクト生成部302は、オブジェクト集計処理と特別クラス対策処理の実行を開始する。
S1202〜S1204にて、第一の実施形態のS902〜904に加えて、オブジェクト生成部302は、特別クラス対策処理を実行する。詳細を図13で説明する。なお、S1202〜S1204の特別クラス対策処理は同じであるため、図13ではS1202〜S1204をまとめて、共通部分の説明をする。
S1205にて、オブジェクト生成部302は、オブジェクト集計処理と特別クラス対策処理の実行を終了する。
図13は、図12のS1202〜S1204を実行した際の処理を示すフローチャートである。ここで、クラスロード監視部313、バイトコード挿入部312、バイトコード実行部301、およびオブジェクト生成部302の処理は、基本的には図8の処理と同じである。差異としては、クラスロード監視部313がS1101を実行する点と、バイトコード挿入部312がS1102を実行する点と、オブジェクト生成部302がS1103、S1302〜S1304を実行する点である。なお、S1101〜S1103は上述した処理と同じであるため、ここでの説明は省略する。
S1301にて、アプリケーションA205は、S1202の処理を開始する。あるいは、アプリケーションメモリ管理部306は、S1203もしくはS1204の処理を開始する。ここで、アプリケーションA205が実行を開始するか、アプリケーションメモリ管理部306が実行を開始するかは、S1202〜S1204のどの処理の実行開始なのかによって決まる。処理が開始されるとS802に進む。
S1302にて、オブジェクト生成部302は、Javaオブジェクト生成時の処理を実行した後に、アプリケーションメモリ管理部306にある特別クラスフラグ1001の判定を行う。特別クラスフラグ1001が「TRUE」の場合は(S1302にてYES)S1305に進み、「FALSE」の場合は(S1302にてNO)S1303に進む。
S1303にて、オブジェクト生成部302は、特別クラスフラグ1001を「TRUE」にする。その後、S1103に進む。
S1103の処理を終了すると、S1304にて、オブジェクト生成部302は、特別クラスフラグ1001を「FALSE」にする。特別クラスフラグ1001を「FALSE」にすると、特別クラス対策処理が終了し、S1305に進む。
S1305にて、アプリケーションA205は、S1202の処理を終了するか否かを判定する。あるいはアプリケーションメモリ管理部306は、S1203もしくはS1204の処理を終了するか否かを判定する。ここで、処理がまだ終わっていない場合は(S1305にてNO)S802に進み、処理が全て終わった場合は(S1305にてYES)S1306に進む。
S1306にて、アプリケーションA205は、S1202の処理の実行を終了する。あるいは、アプリケーションメモリ管理部306は、S1203もしくはS1204の処理の実行を終了する。
第二の実施形態では、バイトコード挿入部312が、オブジェクト集計処理の実行中に生成するJavaオブジェクトのクラスに、特別クラスフラグを判定するためのバイトコードを挿入する。そして、オブジェクト集計処理の実行中に、アプリケーションA205、あるいはアプリケーションメモリ管理部306がJavaオブジェクトを生成すると、オブジェクト生成部302は挿入したバイトコードの処理も実行する。よって、Javaオブジェクトの生成とオブジェクト集計処理の実行を繰り返さないようにできる。
<第三の実施形態>
本発明の第三の実施形態について説明する。第一の実施形態では、情報処理装置100に複数のアプリがインストールされている場合、全てのアプリケーションに対して、同じようにメモリ使用量を計測している。しかし、全てのアプリケーションに対してではなく、指定したアプリケーションのみに対して、メモリ使用量の計測を行っても良い。指定するアプリケーションとして、例えば、情報処理装置100に最初からインストールされているようなアプリケーションではなく、ユーザが後からインストールするアプリケーションのみを指定する場合がある。なお、以降では、情報処理装置100に最初からインストールされているようなアプリケーションを「システムアプリ」と呼ぶ。そして、本実施形態では、システムアプリである場合には、メモリ使用量の計測・集計を行わないこととする。
上記の実施形態では、全てのJavaオブジェクトを生成する処理のバイトコードの後に、オブジェクト集計処理のバイトコードを挿入し、Javaオブジェクトの生成時にオブジェクト集計処理を実行する。そして、オブジェクト集計処理の中で、オブジェクト管理テーブル307に、生成したJavaオブジェクトに関する情報を追加する。しかし、全てのJavaオブジェクト生成処理のバイトコードの後に、オブジェクト集計処理のバイトコードを挿入すると、開始する全てのアプリケーションに対して、メモリ使用量を計測してしまう。
本実施形態では、オブジェクト集計処理の中で、生成したJavaオブジェクトに関する情報をオブジェクト管理テーブルに追加する前に、そのJavaオブジェクトを生成しようとするアプリケーションが、計測する対象であるか否かを判定する処理を加える。そして、Javaオブジェクトを生成するアプリケーションが計測対象である場合に、生成するJavaオブジェクトの情報をオブジェクト管理テーブルに追加し、アプリケーションが計測対象でなかった場合は、オブジェクト集計処理を終了する。以降、第一の実施形態と異なる点のみを図14〜図16を用いて説明する。
[ソフトウェア構成]
図14は、第三の実施形態のアプリケーションメモリ管理部306が計測フラグ1401を管理するソフトウェア構成例を示す。計測フラグ1401は、Javaオブジェクトを生成しようとするアプリケーションが計測対象であるか否かを判定するためのフラグである。計測フラグ1401はアプリケーション毎に定義され、基本的には「TRUE」であるが、情報処理装置100にインストールしたアプリケーションがシステムアプリである場合は「FALSE」になる。
[処理フロー]
図15は、本実施形態に係る処理フローであり、図7で示した処理フローに対し、S703とS704の間にS1501を、S708とS709の間にS1502〜S1505を加えている。
S1501にて、バイトコード挿入部312は、オブジェクト管理テーブル生成処理のバイトコードの後に、計測フラグ定義処理のバイトコードを挿入する。このバイトコードの挿入は、S703のオブジェクト管理テーブル生成処理のバイトコードの挿入の後に行う。計測フラグ定義処理は、アプリケーションメモリ管理部306に計測フラグ1401を定義する処理である。バイトコードを挿入すると、S704に進む。
オブジェクト管理テーブル307を生成した後(S708)、S1502にて、オブジェクト生成部302は、計測フラグ定義処理を実行する。
S1503にて、アプリケーション管理部305は、インストールするアプリケーションがシステムアプリか否かを判定する。システムアプリである場合は(S1503にてYES)S1504に進み、システムアプリでない場合は(S1503にてNO)S1505に進む。
S1504にて、アプリケーションメモリ管理部306は、初期値を「FALSE」として計測フラグ1401を定義する。その後、S709に進む。
S1505にて、アプリケーションメモリ管理部306は、初期値を「TRUE」として計測フラグ1401を定義する。その後、S709に進む。
図16は、本実施形態に係るオブジェクト集計処理のフローチャートであり、図9にて示した処理フローに対し、S902とS903の間にS1601を加えている。
アプリケーションの識別を行った後(S902)、S1601にて、アプリケーションメモリ管理部306は、計測フラグ1401が「TRUE」か否かを判定する。計測フラグ1401が「TRUE」の場合は(S1601にてYES)S903に進み、「FALSE」の場合は(S1601にてNO)S905に進む。
第三の実施形態では、Javaオブジェクト生成処理のバイトコードの後に、計測フラグ定義処理のバイトコードを挿入する。また、オブジェクト集計処理の中に計測フラグ判定処理のバイトコードを挿入する。そして、そのJavaオブジェクトを生成しようとするアプリケーションが計測する対象であるか否かを判定してから、生成したJavaオブジェクトの情報をオブジェクト管理テーブルに追加する。この構成により、全てのアプリケーションに対してではなく、指定したアプリケーションのみに対して、メモリ使用量の計測を行うことができる。なお、本実施形態では、システムアプリを計測・集計の対象から外したが、これ以外にもユーザが新たにインストールしたアプリケーションのうち、計測・集計の対象から外すようにしてもよい。この場合、UI画面等を提供し、対象となるアプリケーションをユーザが指定できるようにしてもよい。
<第四の実施形態>
本発明の第四の実施形態について説明する。第一の実施形態では、アプリケーションのメモリ使用量を計測している。その他にも、情報処理装置の他のリソースであるソケットやスレッド、あるいはファイルディスクリプタなどの計測を行っても良い。以降では、情報処理装置のメモリ以外のリソースであるスレッドやソケット、あるいはファイルディスクリプタなどを「計測対象リソース」と呼ぶ。
上記の実施形態では、Javaオブジェクトを生成する際に、オブジェクト集計処理を実行する。そして、オブジェクト集計処理の中で、生成したJavaオブジェクトの情報をオブジェクト管理テーブルに追加し、そのメモリ使用量の集計を行う。しかし、メモリ使用量の集計しか行っていないため、他の計測対象リソースの使用量を計測することができない。
そこで本実施形態では、オブジェクト管理テーブルに追加されているJavaオブジェクトの情報を集計する際に、そのJavaオブジェクトが計測対象リソースであるか否かを判定する処理を加える。そして、計測対象リソースである場合、計測対象リソースであるJavaオブジェクトの数をカウントする。以降、第一の実施形態と異なる点のみを表3及び、図17、図18を用いて説明する。
表3は、第一の実施形態のオブジェクト管理テーブル307(表1)に、計測対象リソースフラグを加えたオブジェクト管理テーブル307を示す表である。計測対象リソースフラグは、オブジェクト管理テーブル307に追加されているJavaオブジェクトが計測対象リソースであるか否かを判定するためのフラグである。本実施形態では、アプリケーションメモリ管理部306は、計測対象リソースフラグを含むオブジェクト管理テーブル307を生成する。
Figure 0006548379
計測対象リソースフラグは、スレッド、ソケット、ファイルディスクリプタのように計測対象リソース毎に定義される。計測対象リソースは、基本的に「FALSE」であるが、生成するJavaオブジェクトが計測対象のリソースである場合には「TRUE」になる。例えば、表3に示すように、objectA002がソケットのクラスをインスタンス化したJavaオブジェクトである場合、objectA002のソケットの計測対象リソースフラグが「TRUE」になる。同様に、objectA003がスレッドのクラスをインスタンス化したJavaオブジェクトである場合、objectA003のスレッドの計測対象リソースフラグが「TRUE」になる。生成するJavaオブジェクトが計測対処リソースでない場合は、objectA001のように計測対象リソースフラグが全て「FALSE」になる。なお、本実施形態では、スレッド、ソケット、ファイルディスクリプタを計測対象リソースの例として示しているが、これに限定するものではなく、情報処理装置が処理を実行する上で利用する他の種類のリソースを対象としても構わない。また、UI画面等を提供し、対象となるリソースをユーザが指定できるようにしてもよい。
[処理フロー]
図17は、本実施形態に係る処理フローであり、図8に示した処理フローに対し、S804とS806の間にS1701、S1702を、S808とS810の間にS1703〜S1706を加えている。
クラスロード監視部313がクラスファイルの読み込みを検知すると、S1701にて、バイトコード挿入部312は、Javaオブジェクトを生成する処理のバイトコードの後に、計測対象リソースフラグを定義する処理のバイトコードを挿入する。計測対象リソースフラグを定義する処理は、生成するJavaオブジェクトが計測対象リソースであるか否かに従って、Javaオブジェクトに計測対象リソースフラグの定義を行う処理である。バイトコードの挿入の後、S805に進む。
S1702にて、バイトコード挿入部312は、S805のオブジェクト集計処理のバイトコードを挿入した後に、計測対象リソース集計処理のバイトコードを挿入する。計測対象リソース集計処理は、アプリケーションメモリ管理部306が、オブジェクト管理テーブル307にある値が「TRUE」の計測対象リソースフラグの数をカウントする処理である。バイトコードの挿入の後、S806に進む。
S1703にて、オブジェクト生成部302は、Javaオブジェクト生成処理を実行した後(S808)、生成するJavaオブジェクトが計測対象リソースであるか否かを判定する。生成するJavaオブジェクトが計測対象リソースである場合(S1703にてYES)S1704に進み、計測対象リソースでない場合(S1703にてNO)S1705に進む。
S1704にて、オブジェクト生成部302は、初期値を「FALSE」として計測対象リソースフラグを定義する。その後、S1706に進む。
S1705にて、オブジェクト生成部302は、初期値を「TRUE」として計測対象リソースフラグを定義する。その後、S1706に進む。
S1702のリソース集計処理のバイトコードを挿入することで、S1706にて、オブジェクト生成部302は、第一の実施形態のS809の代わりに、オブジェクト集計処理とリソース集計処理を実行する。S1706が終了すると、S810に進む。
(オブジェクト集計処理及びリソース集計処理)
図18は、図17のS1706において、オブジェクト生成部302がオブジェクト集計処理とリソース集計処理を実行する際の処理を示すフローチャートである。
S1801にて、オブジェクト生成部302は、オブジェクト集計処理とリソース集計処理の実行を開始する。実行を開始すると、S902に進む。
S904のメモリ使用量の集計をした後、S1802にて、アプリケーションメモリ管理部306は、オブジェクト管理テーブル307のうち、「TRUE」になっている計測対象フラグの数をカウントする。このカウントは計測対象リソースであるスレッド、ソケット、ファイルディスクリプタのそれぞれに対して行う。このカウントをした結果が、計測対象リソースの使用量の計測結果になる。計測対象リソースの集計を終了すると、S1803に進む。
集計処理を終了すると、S1803にて、オブジェクト生成部302は、オブジェクト集計処理とリソース集計処理の実行を終了する。
第四の実施形態では、Javaオブジェクト生成時の処理のバイトコードの後に、計測対象リソースフラグ定義処理と計測対象リソース集計処理を挿入する。そして、そのJavaオブジェクトが計測対象リソースであった場合、アプリケーションメモリ管理部がカウントして使用量を集計する。この構成により、メモリ使用量ではなく、他の計測対象リソースの使用量も計測することができる。
<その他の実施例>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
102…CPU、103…ROM、104…RAM、105…外部記憶装置

Claims (8)

  1. クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションを備えた情報処理装置であって、
    前記複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計手段と、
    前記オブジェクトは前記集計手段による前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定手段と
    前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入手段と
    を備え、
    前記挿入手段にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、
    前記集計手段は、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量を集計し、
    前記挿入手段は、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードを、新たなオブジェクトのクラスファイルに挿入し、
    前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、
    前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象として、
    前記アプリケーションの処理が実行されることを特徴とする情報処理装置。
  2. 前記挿入手段は、前記アプリケーションを前記情報処理装置にインストールする際に、前記アプリケーションに対応する管理テーブルを生成するための第三のバイトコードを挿入し、
    前記第三のバイトコードが実行されることにより、前記アプリケーションに対応する前記管理テーブルが前記記憶部に生成され、
    前記第一のバイトコードが実行された際に、前記アプリケーションが生成したオブジェクトが使用するリソースの情報は、前記アプリケーションに対応する管理テーブルに登録されることを特徴とする請求項に記載の情報処理装置。
  3. 前記挿入手段は、前記集計処理の実行対象となるアプリケーションを設定するための第四のバイトコードを挿入し、
    前記第一のバイトコードが実行された場合、前記第四のバイトコードが実行された際に設定されるアプリケーションが、前記集計手段により、対象として集計されることを特徴とする請求項1または2に記載の情報処理装置。
  4. 前記第四のバイトコードは、ユーザにより前記情報処理装置に新たにインストールされたアプリケーションを対象とするように構成されることを特徴とする請求項に記載の情報処理装置。
  5. 前記挿入手段は、集計する対象となるリソースの種類を設定するための第五のバイトコードを挿入し、
    前記第一のバイトコードが実行された場合、前記第五のバイトコードが実行された際に設定されるリソースが、前記集計手段により、集計されることを特徴とする請求項1乃至4のいずれか一項に記載の情報処理装置。
  6. 前記リソースの種類は、メモリ、スレッド、ソケット、およびファイルディスクリプタの少なくともいずれかであることを特徴とする請求項に記載の情報処理装置。
  7. クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションを備えた情報処理装置の制御方法であって、
    記複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計工程と、
    記オブジェクトは前記集計工程における前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定工程と
    前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入工程と
    を有し、
    前記挿入工程にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、
    前記集計工程において、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量が集計され、
    前記挿入工程において、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードが、新たなオブジェクトのクラスファイルに挿入され、
    前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、
    前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象となることを特徴とする情報処理装置の制御方法。
  8. コンピュータを、
    クラスファイルに含まれるバイトコードを用いて処理を実行する複数のアプリケーションに含まれるアプリケーションがオブジェクトを生成した場合に、前記オブジェクトが使用したリソースの情報を集計する集計手段、
    前記オブジェクトは前記集計手段による前記リソースの集計処理を実行している最中に生成されたか否かを判定する判定手段
    前記アプリケーションに対応するクラスファイルに、前記集計処理を実行するための第一のバイトコードを挿入する挿入手段
    として機能させ、
    前記挿入手段にて挿入された前記第一のバイトコードが実行されることにより、前記第一のバイトコードを実行した前記アプリケーションが識別され、前記アプリケーションおよび前記オブジェクトが使用するリソースの情報が対応付けて記憶部に登録され、
    前記集計手段は、前記記憶部に登録された情報に基づいて、アプリケーションごとのリソースの使用量を集計し、
    前記挿入手段は、前記第一のバイトコードによる前記集計処理が実行中であるか否かを判定するための第二のバイトコードを、新たなオブジェクトのクラスファイルに挿入し、
    前記第二のバイトコードが実行されることにより、前記新たなオブジェクトは前記集計処理を実行している最中に生成されたと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象から除外され、
    前記新たなオブジェクトは前記集計処理を実行している最中に生成されていないと判定された場合には、前記新たなオブジェクトは前記集計処理の実行対象となることを特徴とするプログラム。
JP2014216634A 2014-10-23 2014-10-23 情報処理装置およびその制御方法、並びにプログラム Active JP6548379B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014216634A JP6548379B2 (ja) 2014-10-23 2014-10-23 情報処理装置およびその制御方法、並びにプログラム
US14/876,130 US10089211B2 (en) 2014-10-23 2015-10-06 Information processing apparatus that executes processing by using a bytecode, method for controlling the same, and non-transitory computer-readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014216634A JP6548379B2 (ja) 2014-10-23 2014-10-23 情報処理装置およびその制御方法、並びにプログラム

Publications (3)

Publication Number Publication Date
JP2016085537A JP2016085537A (ja) 2016-05-19
JP2016085537A5 JP2016085537A5 (ja) 2017-11-24
JP6548379B2 true JP6548379B2 (ja) 2019-07-24

Family

ID=55792093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014216634A Active JP6548379B2 (ja) 2014-10-23 2014-10-23 情報処理装置およびその制御方法、並びにプログラム

Country Status (2)

Country Link
US (1) US10089211B2 (ja)
JP (1) JP6548379B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108255673B (zh) * 2017-12-29 2021-10-15 东软集团股份有限公司 应用程序占用资源的检测方法、装置和存储介质
CN108628740A (zh) * 2018-04-10 2018-10-09 杭州迪普科技股份有限公司 一种文件描述符泄露检测方法及装置
CN111562913B (zh) * 2020-04-28 2023-03-14 抖音视界有限公司 视图组件的预创建方法、装置、设备及计算机可读介质
CN114461482A (zh) * 2020-11-10 2022-05-10 南京中兴新软件有限责任公司 插件资源管理的方法和装置、电子设备、计算机可读介质
CN112732560B (zh) * 2020-12-31 2023-10-27 杭州迪普科技股份有限公司 文件描述符泄露风险的检测方法及装置

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment
US6314558B1 (en) * 1996-08-27 2001-11-06 Compuware Corporation Byte code instrumentation
JP2000293410A (ja) * 1999-04-09 2000-10-20 Nec Corp プロファイラ
US7367025B1 (en) * 2003-12-30 2008-04-29 Sap Ag Byte code modification for testing, debugging and/or monitoring of virtual machine based software
US20060136886A1 (en) * 2004-12-16 2006-06-22 Bret Patterson Process and implementation for interrupting locked threads
US20060136916A1 (en) * 2004-12-17 2006-06-22 Rowland John R Method and apparatus for transaction performance and availability management based on program component monitor plugins and transaction performance monitors
US7793304B2 (en) * 2005-05-04 2010-09-07 Symantec Corporation System and method for monitoring memory usage
US8631401B2 (en) * 2007-07-24 2014-01-14 Ca, Inc. Capacity planning by transaction type
US8261278B2 (en) * 2008-02-01 2012-09-04 Ca, Inc. Automatic baselining of resource consumption for transactions
US8245200B2 (en) * 2008-07-11 2012-08-14 International Business Machines Corporation Method, system, and apparatus for dynamically injecting logging statements into web 2.0 javascript applications
US8566800B2 (en) 2010-05-11 2013-10-22 Ca, Inc. Detection of method calls to streamline diagnosis of custom code through dynamic instrumentation
US8910127B2 (en) * 2012-09-20 2014-12-09 Identify Software Ltd. (IL) Estimating indirect interface implementation before load time based on directly implemented methods

Also Published As

Publication number Publication date
US20160117236A1 (en) 2016-04-28
JP2016085537A (ja) 2016-05-19
US10089211B2 (en) 2018-10-02

Similar Documents

Publication Publication Date Title
JP6548379B2 (ja) 情報処理装置およびその制御方法、並びにプログラム
CN107430549B (zh) 基于联合的存储器管理
US10338956B2 (en) Application profiling job management system, program, and method
JP5147728B2 (ja) 質的に注釈を付けられた注釈付きコード
US8161471B2 (en) Utility for optimizing required memory for distribution in embedded systems
US8819396B2 (en) Parallel processing using plural processing modules when processing time including parallel control overhead time is determined to be less than serial processing time
US9542228B2 (en) Image processing apparatus, control method thereof and storage medium
EP2765525B1 (en) Apparatus, non-transitory computer readable information recording medium and information recording method
US9710355B2 (en) Selective loading of code elements for code analysis
US9542170B2 (en) Development tool for footprint reduction
US11120521B2 (en) Techniques for graphics processing unit profiling using binary instrumentation
KR20120036209A (ko) 컴퓨팅 시스템에서 부트 이미지의 크기를 최적화하는 부팅이미지 생성방법
KR100654428B1 (ko) 자바 프로그램의 처리 속도를 향상시키는 시스템 및 그 방법
JP2020016926A (ja) 情報処理装置、情報処理装置の制御方法、及び、プログラム
CN108763052B (zh) 一种虚拟现实软件内存回收机制的性能检测方法及系统
US9244672B2 (en) Optimization utility for developing embedded systems
US9588755B2 (en) Information processing apparatus capable of controlling installation of application, method of controlling the same, and storage medium
KR102098905B1 (ko) 호스트의 테스트 시나리오로 제어장치의 복수의 파티션간 영향도를 측정하기 위한 방법, 동일 방법을 구현하기 위한 호스트 및 시스템, 그리고 동일 방법을 기록하기 위한 매체
CN110134454B (zh) 一种启动应用程序的方法及其装置
JP5423876B2 (ja) 検証支援プログラム、検証支援装置、および検証支援方法
US9753775B2 (en) Resource management apparatus and resource management method
US9634912B2 (en) Computer, resource usage calculation method, and resource usage calculation program
KR101103795B1 (ko) 포터블 매체를 이용한 소프트웨어 가상화 시스템 제공방법
JP2014078175A (ja) 情報処理装置、その制御方法、及びプログラム
US8913257B2 (en) Image forming apparatus, method and program of managing the image forming apparatus by reserving area for identified counter

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171011

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171011

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180522

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180706

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180807

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190214

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: 20190527

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190625

R151 Written notification of patent or utility model registration

Ref document number: 6548379

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151