JP2017531852A - リソースリーク検出の方法、装置及びシステム - Google Patents

リソースリーク検出の方法、装置及びシステム Download PDF

Info

Publication number
JP2017531852A
JP2017531852A JP2017511234A JP2017511234A JP2017531852A JP 2017531852 A JP2017531852 A JP 2017531852A JP 2017511234 A JP2017511234 A JP 2017511234A JP 2017511234 A JP2017511234 A JP 2017511234A JP 2017531852 A JP2017531852 A JP 2017531852A
Authority
JP
Japan
Prior art keywords
resource
target
storage
preset
proportional value
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
JP2017511234A
Other languages
English (en)
Other versions
JP6446125B2 (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of JP2017531852A publication Critical patent/JP2017531852A/ja
Application granted granted Critical
Publication of JP6446125B2 publication Critical patent/JP6446125B2/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/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • 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/3452Performance evaluation by statistical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本発明の実施形態は、リソースリーク検出の方法、装置及びシステムを開示する。本方法は、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、ターゲットコードはプログラムコードの部分コードである、ステップと、ターゲットリソースによって占用される第1の記憶リソース量を決定するステップと、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップと、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たす場合、ターゲットコードの記憶場所をリソースリーク場所として決定するステップとを含む。本発明の実施形態では、プログラムのターゲットコードを追跡することができ、更に、検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。全てのリソース割当てと解放を追跡する必要がなく、性能オーバヘッドが低減され、リソースリーク検出効率が改善される。

Description

本願は、2014年8月26日に中国知識産権局に提出された「リソースリーク検出の方法、装置及びシステム」と題された中国特許出願第201410425600.2号に対する優先権を主張し、その全体が参照により本明細書に組み込まれる。
本発明はコンピュータ分野に関し、特に、リソースリーク検出の方法、装置及びシステムに関する。
実行中のプロセスでは、プログラムは通常、メモリ、ファイルハンドル、セマフォ、メッセージカプセル、データベース接続プール等のいくつかのリソースを呼び出す。プログラムの実行が終了すると、呼び出されたリソースは適時に解放される必要がある。リソースリークとは、リリース省略や無効なメモリアクセス等の問題により、プログラムが使用されなくなったリソースを解放できず、結果としてリソースを再利用できないことを指す。リソースが絶えずリークするにつれて、システム内に利用可能なリソースが少なくなる。その結果、システム性能が低下し、最終的にリソースが不十分であるために、サービスを提供したりサービスを処理することさえできなってしまう。
従来技術では、メモリ割当て時、メモリが割り当てられた回数と割り当てられたメモリのサイズとがログファイルに記録される。メモリ解放時には、メモリが解放された回数と解放されたメモリのサイズとがログファイルに記録される。メモリが割り当てられた回数と、割り当てられたメモリのサイズと、メモリが解放された回数と、解放されたメモリのサイズとに従って、メモリが解放されなかった回数と未解放のメモリのサイズが決定される。このように、メモリリークが検出される。従来技術では、全てのメモリ割当てとメモリ解放を追跡し記録する必要があり、これにより、検出オーバヘッドが高くなり、効率が低くなってしまう。従来技術は、プログラムのテスト段階又はデバッグ段階でのみ使用可能であり、プログラムが実際に動作するオンライン環境ではメモリリーク検出を行うことができない。実際にプログラムが実行されたときに発生する比較的検出の難しいメモリリークを検出することができず、検出されなかったメモリリークがサービスに損害を与えたり、サービスを中断したりすることさえある。
本発明の実施形態は、性能オーバヘッドを低減し、リソースリーク検出効率を改善することのできるリソースリーク検出の方法、装置及びシステムを提供する。
本発明の実施形態の第1の態様は、リソースリーク検出方法を提供する。本方法は、
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、ターゲットコードはプログラムコードの部分コードである、ステップと、
ターゲットリソースによって占用される第1の記憶リソース量を決定するステップと、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップであって、第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリークを構成することとして設定される、ステップと、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たす場合、ターゲットコードの記憶場所をリソースリーク場所として決定するステップと、
を含む。
第1の態様の第1の可能な実施方式では、ターゲットリソースは少なくとも2つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスにおいて呼び出される、ターゲットリソースの部分リソースである。本方法は更に、
ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するステップと、
ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定するステップと、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するステップであって、第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される、ステップと、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たす場合、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するステップと、
を含む。
第1の態様の第2の可能な実施方式では、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含む。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定され、第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップは、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、
を含む。
第1の態様の第1の可能な実施方式に関して、第1の態様の第3の可能な実施方式では、第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含む。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定され、第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するステップは、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された閾値よりも大きいか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された閾値よりも大きい場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定するステップ、又は、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定するステップ、
を含む。
第1の態様の第4の可能な実施方式では、ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含む。記憶場所単位の各々はサブコードを記憶し、少なくとも2つの記憶場所単位に記憶されたサブコードはターゲットコードを構成する。本方法は更に、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するステップであって、少なくとも2つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する、ステップと、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値を決定するステップと、
比例値が第3の事前設定された条件を満たすか否かを判定するステップであって、第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される、ステップと、
比例値が第3の事前設定された条件を満たす場合、記憶場所単位をリソースリーク場所単位として決定するステップと、
を含む。
第1の態様の第4の可能な実施方式に関して、第1の態様の第5の可能な実施方式では、第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含む。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
比例値が第3の事前設定された条件を満たすか否かを判定するステップは、
比例値が第3の事前設定された閾値よりも大きいか否かを判定し、比例値が第3の事前設定された閾値よりも大きい場合、比例値が第3の事前設定された条件を満たすと決定するステップ、又は、
比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定し、比例値がリソース周期において第3の事前設定された増加規則を満たす場合、比例値が第3の事前設定された条件を満たすと決定するステップ、
を含む。
本発明の実施形態の第2の態様は、リソースリーク検出装置を提供する。本装置は、
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するように構成される第1の取得モジュールであって、ターゲットコードはプログラムコードの部分コードである、第1の取得モジュールと、
ターゲットリソースによって占用される第1の記憶リソース量を決定するように構成される第1の決定モジュールと、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するように構成される第1の判定モジュールであって、第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリークを構成することとして設定される、第1の判定モジュールと、
第1の判定モジュールの判定結果が是であるとき、ターゲットコードの記憶場所をリソースリーク場所として決定するように構成されるリーク場所決定モジュールと、
を備える。
第2の態様の第1の可能な実施方式では、ターゲットリソースは少なくとも2つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスにおいて呼び出される、ターゲットリソースの部分リソースである。本装置は更に、
ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するように構成される第2の取得モジュールと、
ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定するように構成される第2の決定モジュールと、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するように構成される第2の判定モジュールであって、第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される、第2の判定モジュールと、
第2の判定モジュールの判定結果が是であるとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するように構成されるリークパス決定モジュールと、
を備える。
第2の態様の第2の可能な実施方式では、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含む。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定され、第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
第1の判定モジュールは、第1の判定サブモジュール又は第2の判定サブモジュールを含み、
第1の判定サブモジュールは、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きいか否かを判定し、第1の判定サブモジュールの判定結果が是であるとき、第1の判定モジュールの判定結果が是であると決定するように構成され、
第2の判定サブモジュールは、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、第2の判定サブモジュールの判定結果が是であるとき、第1の判定モジュールの判定結果が是であると決定するように構成される。
第2の態様の第1の可能な実施方式に関して、第1の態様の第3の可能な実施方式では、第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含む。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
第2の判定モジュールは、第3の判定サブモジュール又は第4の判定サブモジュールを含み、
第3の判定サブモジュールは、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された閾値よりも大きいか否かを判定し、第3の判定サブモジュールの判定結果が是であるとき、第2の判定モジュールの判定結果が是であると決定するように構成され、
第4の判定サブモジュールは、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを判定し、第4の判定サブモジュールの判定結果が是であるとき、第2の判定モジュールの判定結果が是であると決定するように構成される。
第1の態様の第4の可能な実施方式では、ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含む。記憶場所単位の各々はサブコードを記憶し、少なくとも2つの記憶場所単位に記憶されたサブコードはターゲットコードを構成する。本装置は更に、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成される第3の取得モジュールであって、少なくとも2つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する、第3の取得モジュールと、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値を決定するように構成される第3の決定モジュールと、
比例値が第3の事前設定された条件を満たすか否かを判定するように構成される第3の判定モジュールであって、第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される、第3の判定モジュールと、
第3の判定モジュールの判定結果が是であるとき、記憶場所単位をリソースリーク場所単位として決定するように構成されるリーク場所単位決定モジュールと、
を備える。
第2の態様の第4の可能な実施方式に関して、第1の態様の第5の可能な実施方式では、第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含む。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、
第3の判定モジュールは、第5の判定サブモジュール又は第6の判定サブモジュールを含み、
第5の判定サブモジュールは、比例値が第3の事前設定された閾値よりも大きいか否かを判定し、第5の判定サブモジュールの判定結果が是であるとき、第3の判定モジュールの判定結果が是であると決定するように構成され、
第6の判定サブモジュールは、比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定するように構成され、リソース周期は第1の記憶リソース量の占用される周期であり、且つ、第6の判定サブモジュールの判定結果が是であるとき、第3の判定モジュールの判定結果が是であると決定するように構成される。
本発明の実施形態の第3の態様は、リソースリーク検出システムを提供する。本システムは、メモリ、リソースリーク検出装置及び表示装置を備え、
メモリは、リソースリーク検出プログラムを記憶するように構成され、
リソースリーク検出装置は、メモリに記憶されたリソースリーク検出プログラムを実行して、第1の態様と、第1の態様の第1の可能な実施方式、第2の可能な実施方式、第3の可能な実施方式及び第4の可能な実施方式とのうちいずれか1つに係るリソースリーク検出方法を実行するように構成され、
表示装置は、リソースリーク検出装置によって得られたリソースリーク検出結果を表示するように構成される。
本発明の実施形態では、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得し、ターゲットリソースによって占用される第1の記憶リソース量を決定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。このように、プログラムのターゲットコードを追跡することができ、更に検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。本発明の実施形態では、プログラムのターゲットコードを追跡し、ターゲットコードはプログラムコードの部分コードである。プログラムの全てのコードを追跡する必要がなく、ターゲットコードの実行時に呼び出されるターゲットリソースのみを検出することが必要となる。また、全てのリソース割当てと解放を追跡する必要がなく、性能スオーバーヘッドが低く、通常のサービス実行に影響が出ない。このように、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、リソースリーク検出効率が改善される。
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の実施形態では、プログラムのターゲットコードを追跡することによりリソースリーク場所を検出することができるので、リソースリーク検出精度を改善することができる。また、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、偽陰性率が低下する。
本発明の実施形態又は従来技術における技術的解決策をより明確に説明するために、以下、実施形態又は従来技術を説明するために必要な添付図面を簡潔に説明する。明らかながら、添付図面は以下の説明において、本発明の一部の実施形態を示すものに過ぎない。当業者であれば、これらの添付図面から創意工夫なく他の図面を更に導出できるであろう。
本発明の第1の実施形態に係るリソースリーク検出方法の概略図である。 本発明の第2の実施形態に係るリソースリーク検出方法の概略図である。 本発明の第3の実施形態に係るリソースリーク検出方法の概略図である。 本発明の実施形態に係るリソースリーク検出装置の概略構造図である。 本発明の実施形態に係る検出端末の概略構造図である。 本発明の実施形態に係るリソースリーク検出システムの概略構造図である。
以下、本発明の実施形態において添付図面を参照しながら、本発明の実施形態における技術的解決策を明確且つ完全に説明する。明らかながら、説明される実施形態は本発明の実施形態の一部に過ぎず、全部ではない。当業者が本発明の実施形態に基づいて創意工夫なく得た他の実施形態は、全て本発明の保護範囲に包含されるものとする。
本発明の実施形態は、リソースリーク検出の方法及び装置を提供する。本発明の実施形態におけるリソースリーク検出装置は、スマートフォン、タブレットコンピュータ、コンピュータ、サーバ等の、プログラムを実行可能な端末装置を含んでよい。更に、本発明の実施形態におけるリソースリーク検出装置は更に、リソース検出クライアント等のクライアントモジュールを端末装置に備えてよい。
本発明の実施形態は、アンドロイド(Android)オペレーティングシステムやLinuxオペレーティングシステムのようなオペレーティングシステムにおけるリソースリーク検出に適用可能であり、更に、オフィスソフトウェアや通信ソフトウェアのようなアプリケーションプログラムにおけるリソースリーク検出に適用可能であるリソースリーク検出の解決策を提供し、本発明の実施形態において特に限定されない。本発明の実施形態におけるプログラムは、AndroidオペレーティングシステムやLinuxオペレーティングシステム等のオペレーティングシステムを含んでよく、更に、端末装置にインストールされたアプリケーションプログラムを含んでよく、更に、端末装置で実行されるプロセス等を含んでよく、本発明の実施形態において特に限定されない。具体的な実施形態を用いて以下に説明する。
図1を参照する。図1は、本発明の第1の実施形態に係る、リソースリーク検出方法のフローチャートである。図1に示されるように、本実施形態の手順は、以下のステップを含む。
S101.プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得する。ターゲットコードはプログラムコードの部分コードである。
任意の実施方式では、本発明の実施形態におけるプログラムは、AndroidオペレーティングシステムやLinuxオペレーティングシステム等のオペレーティングシステムを含んでよく、更に、端末装置にインストールされたアプリケーションプログラムを含んでよく、更に、端末装置で実行されるプロセス等を含んでよく、本発明の本実施形態において特に限定されない。
更に任意に、本発明の本実施形態では、ターゲットリソースは、プログラムのターゲットコードが実行されるプロセスで呼び出される。ターゲットリソースは、例えば、メモリ、ファイルハンドル、セマフォ、メッセージカプセル及びデータベース接続プールである。プログラムのターゲットコードの実行が終了した後、呼び出されたターゲットリソースは適時に解放される必要がある。ターゲットコードはプログラムコードの部分コードであり、ターゲットコードは、本発明の本実施形態においてリーク検出を行う必要のあるコードである。
更に、プログラムコードは、複数のグループのターゲットコードを含んでよい。プログラムコードは、プログラムコードの開発及び設計時に、機能モジュール及びメモリセグメント等のカテゴリに従って、複数のターゲットコードグループが得られるように分類されてよい。例えば、プログラムがプロセスである場合、プログラムコードは、異なるモジュールを得るために、プログラムコードの機能に従って分割されてよい。ここでは、各モジュールがターゲットコードグループに対応する。代替として、プログラムコードは、異なるサイズのメモリセグメントを得るために、プログラムコードに割り当てられたメモリブロックのサイズに従って分割されてよい。ここでは、各メモリセグメントがターゲットコードのグループに対応する。プログラムがLinuxオペレーティングシステムのスラブメモリである場合、プログラムコードは、複数のターゲットコードグループを得るために、異なるスラブメモリプールに従って分割されてよい。
更に、プログラムコードが複数のターゲットコードグループを含む場合、各ターゲットコードグループの実行時に呼び出されるターゲットリソースは、別々に取得されてよい。全てのターゲットコードグループの実行時に呼び出されるターゲットリソースの合計が、プログラムコードの実行時に呼び出されるリソースを構成する。
S102.ターゲットリソースによって占用される第1の記憶リソース量を決定する。
任意の実施方式では、ターゲットリソースによって占用される第1の記憶リソース量の初期値は0に設定されてよく、リソース割当ての申請時、ターゲットリソースによって占用される第1の記憶リソース量=初期値+割り当てられるリソースの量である。リソース解放が終了した後、ターゲットリソースによって占用される第1の記憶リソース=初期値+割り当てられたリソースの量−解放されたリソースの量である。したがって、ターゲットリソースによって占用される第1の記憶リソース量は、初期値と、割り当てられたリソースの量と、解放されたリソースの量とを用いて、決定することができる。具体的な実施時には、ターゲットリソースによって占用される第1の記憶リソース量は、リソース量又は具体的な測定値、例えばメモリバイト数であってよい。
S103.ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定する。第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリーク条件に適合することである。
S103の判定結果が是であるとき、ステップS104が実行される。S103の判定結果が、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たさないことであるとき、プログラムの別のターゲットコードの実行時に呼び出される必要があるターゲットリソースを再度取得するために、ステップS101〜ステップS103に戻る。
任意の実施方式では、ターゲットリソースによって占用される第1の記憶リソース量は、限定ではないが、占有メモリ量、占有ファイルハンドル量、占有セマフォ量、占有メッセージカプセル量、占有データベース接続プール量等を含むが、本発明の本実施形態では特に限定されない。
更に、本発明の本実施形態では、第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリークを構成することとして設定される。更に、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含んでよい。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定される。第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、ステップS103において、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップは、具体的には、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、
を含んでよい。
具体的な実施時には、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含んでよい。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定される。第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。更に、リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
本発明の本実施形態では、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを決定し、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定することができる。例えば、各リソース周期においてターゲットリソースによって占用される第1の記憶リソース量を用いて増加変化線グラフが描出されてよく、第1の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。Mann-Kendallテスト法(Mannによって最初に提案され、更にKendallによって改良された)は、傾向をテストするために用いられるアルゴリズムである。線形回帰は、統計的な回帰分析を用いる統計的分析方法であり、線形関数モデリングの変種間の量的関係に基づく。Sen勾配推定法は、Henri Theil及びPranab K. Senによって提案された勾配推定アルゴリズムを参照する。
S104.ターゲットコードの記憶場所をリソースリーク場所として決定する。
任意の実施方式では、S103の判定結果が是であるとき、すなわち、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所がリソースリーク場所として決定される。具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。
更に任意に、プログラムコードが複数のターゲットコードグループを含むとき、ステップS101〜S103は、ターゲットコードのグループ毎に同時に実行されてよい。S103の判定結果が是の場合、第1の事前設定された条件を満たすターゲットコードグループの数(Mとして記録)が、事前設定された量(Kとして記録:Kは、プログラム内のリソースリーク場所の事前設定された最大量)よりも大きいとき、ターゲットコードのK個の記憶場所が、第1の事前設定された条件を満たす複数のターゲットコードグループから、リソースリーク場所として決定されてよい。例えば、事前設定された量が3であり、第1の事前設定された条件を満たすターゲットコードのグループ数が5である。5は3よりも大きく、第1の事前設定された条件を満たすターゲットコードの5個のグループは、それぞれターゲットコード1、ターゲットコード2、ターゲットコード3、ターゲットコード4、ターゲットコード5である。ターゲットコード1の実行時、ターゲットリソース1が呼び出され、ターゲットリソース1によって占用される第1の記憶リソース量はリソース量1である。ターゲットコード2の実行時、ターゲットリソース2が呼び出され、ターゲットリソース2によって占用される第1の記憶リソース量はリソース量2である。ターゲットコード3の実行時、ターゲットリソース3が呼び出され、ターゲットリソース3によって占用される第1の記憶リソース量はリソース量3である。ターゲットコード4の実行時、ターゲットリソース4が呼び出され、ターゲットリソース4によって占用される第1の記憶リソース量はリソース量4である。ターゲットコード5の実行時、ターゲットリソース5が呼び出され、ターゲットリソース5によって占用される第1の記憶リソース量はリソース量5である。リソース量1、リソース量2、リソース量3、リソース量4及びリソース量5の値は、比較及びソートされてよい。比較結果がリソース量5>リソース量2>リソース量4>リソース量1>リソース量3である場合、比較的大きなリソース量の事前設定された量は、リソース量5、リソース量2及びリソース量4である。リソース量5、リソース量2、リソース量4に対応するターゲットコード5、ターゲットコード2、ターゲットコード4の記憶場所が、それぞれリソースリーク場所として決定されてよい。
更に任意に、ステップS103の後、本発明の本実施形態で提供されるリソースリーク検出方法は更に、
リソースリーク検出結果についての情報を出力するステップ、
を含んでよい。
具体的な実施時には、リソースリーク検出結果についての情報は、ターゲットコードの属性情報、ターゲットリソースによって占用される第1の記憶リソース量、リソースリーク場所についての情報、リソースリーク呼出パスについての情報、リソースリーク呼出パスによって占用されるリソース量についての情報を含む。リソースリーク検出結果についての情報は、リソース割当て時に記録されてよい。リソースリーク検出結果についての情報を出力することにより、リソースリークの位置決め精度を向上させることができ、位置決め作業負荷を低減することができ、位置決め作業者の技能要求を低減することができる。加えて、研究室で再現を行う必要がなくなり、リソースリークの位置決め効率が向上する。
本発明の本実施形態では、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得し、ターゲットリソースによって占用される第1の記憶リソース量を決定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。このように、プログラムのターゲットコードを追跡することができ、更に、検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、ターゲットコードはプログラムコードの部分コードである。プログラムの全てのコードを追跡する必要がなく、ターゲットコードの実行時に呼び出されるターゲットリソースのみを検出することが必要となる。また、全てのリソース割当てと解放を追跡する必要がなく、性能スオーバーヘッドが低く、通常のサービス実行に影響が出ない。このように、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、リソースリーク検出効率が改善される。
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、リソースリーク場所を検出することができ、それによりリソースリーク検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下する。
図2を参照する。図2は、本発明の第2の実施形態に係るリソースリーク検出方法の概略図である。図2に示されるように、本発明の本実施形態で提供される方法は、図1に示される方法に基づいて実施されてよい。具体的には、本発明の本実施形態におけるステップS201〜S204は、図1に示される方法のステップS104の後に実行されてよい。
図2に示されるように、本発明の本実施形態で提供されるリソースリーク検出方法は更に、ステップS201〜S204を含んでよい。
S201.ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得する。ターゲットリソースは、少なくとも2つのターゲットサブリソースを含んでよい。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
具体的な実施時には、呼出パスは関数呼出スタックを用いて表現されてよく、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスが得られる。ターゲットリソースは少なくとも2つのターゲットサブリソースを含んでよい。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
更に任意に、論理呼出パスを得るために、特定の規則に従って呼出パスがマッピングされてよい。例えば、S104で決定されたリソースリーク場所について、層タイプの数は、リソース割当てのための関数呼出スタックの階層数に基づいて分類して求めることができる。M個の論理呼出パスは各層タイプ毎に事前設定され、M個の論理呼出パスは0,1,2,…,M−1と付番される。リソース割当てのための関数呼出スタックの中間層のリターンアドレスが求められて整数に変換され、その後、Mを用いてモジュロ演算が行われ、得られた結果が論理呼出パス番号として用いられる。この場合、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得することができる。
S202.ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定する。
具体的な実施時には、ターゲットサブリソースが占める第1の記憶リソース量における比例値が決定されてよい。例えば、第1の記憶リソース量は、メモリバイト数1000kbであり、ターゲットサブリソースが占める第1の記憶リソース量における比例値は、200kbである。
S203.ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定する。第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される。S203の判定結果が是であるとき、ステップS204が実行される。S203の判定結果が否であるとき、ステップS201に戻るか、又はステップS101に戻る。
更に、第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される。第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含んでよい。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。具体的には、ステップS203において、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するステップは、具体的には、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された閾値よりも大きいか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された閾値よりも大きい場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定するステップ、又は、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定するステップ、
を含んでよい。
具体的な実施時には、第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含んでよい。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には。ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
本発明の本実施形態では、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを決定することができる。ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定される。例えば、各リソース周期においてターゲットサブリソースが占める第1の記憶リソース量における比例値を用いて増加変化線グラフが描出されてよく、第2の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて決定されてよい。
S204.ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定する。
任意の実施方式では、S203の判定結果が是であるとき、すなわち、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすと決定されたとき、ターゲットサブリソースの呼び出される呼出パスが、リソースリーク呼出パスとして決定される。
本発明の本実施形態を実施することにより、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを得ることができ、ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定することができる。ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定されたとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定することができる。このように、呼出パスを追跡することができ、更に、検出により、呼出パスをリソースリーク呼出パスとして決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
図3を参照する。図3は、本発明の第3の実施形態に係るリソースリーク検出方法の概略図である。図3に示されるように、本発明の本実施形態で提供される方法は、図1に示される方法に基づいて実施されてよい。本発明の本実施形態におけるステップS301〜S304は、図1に示される方法のステップS104の後に実行されてよい。更に任意に、本発明の本実施形態と図2に示される第2の実施形態とで提供される方法は、同時に実行されてもよい。或いは、図3に示される第3の実施形態が最初に実行され、次に図2に示される第2の実施形態が実行される。本発明の本実施形態では、具体的な実施方式は限定されない。
図3に示されるように、本発明の本実施形態で提供されるリソースリーク検出方法は、ステップS301〜S304を含んでよい。本発明の本実施形態では、ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含んでよい。各記憶場所単位はサブコードを記憶し、少なくとも2つの記憶場所単位に記憶されるサブコードが、ターゲットコードを構成する。
S301.記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得する。少なくとも2つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する。
具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。ターゲットコードは、少なくとも2つの記憶場所単位を得るために、ファイル又は行番号に従って分類されてよい。更に任意に、記憶場所単位は、論理的位置を取得するために、特定の規則に従ってマッピングされてよい。例えば、N個の論理的位置がターゲットコード毎に事前設定され、N個の論理的位置は、0,1,2,…,N−1と付番される。ターゲットコードの記憶場所を表すファイル名と行番号が整数に変換され、整数が加算され(乗算等の別の演算を行う)、Nを用いてモジュロ演算が行われ、得られた結果が論理的位置番号として用いられ、それにより記憶場所単位を決定する。更に任意に、記憶場所単位は更に、割り当てられたリソースサイズ等の別の次元を参照して分割されてよい。例えば、記憶場所単位は、割り当てられたメモリブロックのバイト数に基づいて、一定数のブロックタイプに分割されてよい。
S302.記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値を決定する。
具体的な実施時には、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が決定されてよい。例えば、第1の記憶リソース量はメモリバイト数1000kbであり、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値は20kbである。
S303.比例値が第3の事前設定された条件を満たすか否かを判定する。第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が、リソースリークを構成することとして設定される。
S303の判定結果が是であるとき、ステップS304が実行される。S303の判定結果が否であるとき、ステップS301に戻るか、或いはステップS101に戻る。
更に、第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が、リソースリークを構成することとして設定される。第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含んでよい。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、ステップS303において、比例値が第3の事前設定された条件を満たすか否かを判定するステップは、具体的には、
比例値が第3の事前設定された閾値よりも大きいか否かを判定し、比例値が第3の事前設定された閾値よりも大きい場合、比例値が第3の事前設定された条件を満たすと決定するステップ、又は、
比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定し、リソース周期は第1の記憶リソース量の占用される周期であり、且つ、比例値がリソース周期において第3の事前設定された増加規則を満たす場合、比例値が第3の事前設定された条件を満たすと決定するステップ、
を含んでよい。
具体的な実施時には、第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含んでよい。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、リソース周期は、第1の記憶リソース量の占用される周期であり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
本発明の本実施形態では、比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定することができる。比例値がリソース周期において第3の事前設定された増加規則を満たす場合、比例値が第3の事前設定された条件を満たすと決定される。例えば、各リソース周期において比例値を用いて増加変化線グラフが描出されてよく、第3の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、比例値がリソース周期において第3の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。
S304.記憶場所単位をリソースリーク場所単位として決定する。
任意の実施方式では、S303の判定結果が是であるとき、すなわち、比例値がリソース周期において第3の事前設定された増加規則を満たすと決定されたとき、記憶場所単位がリソースリーク場所単位として決定される。
本発明の本実施形態の実施では、ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含んでよく、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを得ることができる。記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が決定され、比例値が第3の事前設定された条件を満たすと決定されたとき、記憶場所がリソースリーク場所単位として決定される。このように、ターゲットコードの記憶場所の記憶場所単位を追跡することができ、更に、検出により、記憶場所単位をリソースリーク場所単位として決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
以下、本発明の実施形態によって提供されるリソースリーク検出装置について、図4を参照して詳細に説明する。
留意すべきこととして、図4に示されるリソースリーク検出装置は、本発明の図1〜図3に示される実施形態のいずれか1つの方法を実行するように構成され、図1〜図3のいずれか1つに基づくリソースリーク検出方法を実行するエンティティである。説明を容易にするために、本発明の本実施形態に関連する部分のみが示される。開示されない具体的な技術的詳細については、図1〜図3に示される実施形態のいずれか1つを参照されたい。本発明の本実施形態のリソースリーク検出装置は、スマートフォン、タブレットコンピュータ、コンピュータ、サーバ等の、プログラムを実行可能な端末装置を含んでよい。
図4に示されるように、図4は、本発明の実施形態に係るリソースリーク検出装置の概略構造図である。本発明の本実施形態で提供されるリソースリーク検出装置は、第1の取得モジュール401、第1の決定モジュール402、第1の判定モジュール403及びリーク場所決定モジュール404を備えてよい。
第1の取得モジュール401は、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するように構成される。ターゲットコードはプログラムコードの部分コードである。
任意の実施方式では、本発明の実施形態におけるプログラムは、AndroidオペレーティングシステムやLinuxオペレーティングシステム等のオペレーティングシステムを含んでよく、更に、端末装置にインストールされたアプリケーションプログラムを含んでよく、更に、端末装置で実行されるプロセス等を含んでよく、本発明の実施形態において特に限定されない。
更に、任意に、本発明の本実施形態では、ターゲットリソースは、プログラムのターゲットコードが実行されるプロセスで呼び出される。ターゲットリソースは、例えば、メモリ、ファイルハンドル、セマフォ、メッセージカプセル及びデータベース接続プールである。プログラムのターゲットコードの実行が終了した後、呼び出されたターゲットリソースは適時に解放される必要がある。ターゲットコードはプログラムコードの部分コードであり、ターゲットコードは、本発明の本実施形態においてリーク検出を行う必要のあるコードである。
更に、プログラムコードは、複数のグループのターゲットコードを含んでよい。プログラムコードは、プログラムコードの開発及び設計時に、機能モジュール及びメモリセグメント等のカテゴリに従って、複数のターゲットコードグループが得られるように分類されてよい。例えば、プログラムがプロセスである場合、プログラムコードは、異なるモジュールを得るために、プログラムコードの機能に従って分割されてよい。ここでは、各モジュールがターゲットコードグループに対応する。代替として、プログラムコードは、異なるサイズのメモリセグメントを得るために、プログラムコードに割り当てられたメモリブロックのサイズに従って分割されてもよい。ここでは、各メモリセグメントがターゲットコードグループに対応する。プログラムがLinuxオペレーティングシステムのスラブメモリである場合、プログラムコードは、複数のターゲットコードグループを得るために、異なるスラブメモリプールに従って分割されてよい。
更に、プログラムコードが複数のターゲットコードグループを含む場合、各ターゲットコードグループの実行時に呼び出されるターゲットリソースは、別々に取得されてよい。全てのターゲットコードグループの実行時に呼び出されるターゲットリソースの合計が、プログラムコードの実行時に呼び出されるリソースを構成する。
第1の決定モジュール402は、ターゲットリソースによって占用される第1の記憶リソース量を決定するように構成される。
任意の実施方式では、ターゲットリソースによって占用される第1の記憶リソース量の初期値は0に設定されてよく、リソース割当ての申請時、ターゲットリソースによって占用される第1の記憶リソース量=初期値+割り当てられたリソースの量である。リソース解放が終了した後、ターゲットリソースによって占用される第1の記憶リソース量=初期値+割り当てられたリソースの量−解放されたリソースの量である。したがって、第1の決定モジュール402は、初期値と、割り当てられたリソースの量と、解放されたリソースの量とを用いて、ターゲットリソースによって占用される第1の記憶リソース量を決定してよい。具体的な実施時には、ターゲットリソースによって占用される第1の記憶リソース量は、リソース量又は具体的な測定値、例えばメモリバイト数であってよい。
第1の判定モジュール403は、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するように構成される。第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリーク条件に適合することである。
任意の実施方式では、ターゲットリソースによって占用される第1の記憶リソース量は、限定ではないが、占有メモリ量、占有ファイルハンドル量、占有セマフォ量、占有メッセージカプセル量、占有データベース接続プール量等を含むが、本発明の本実施形態では特に限定されない。
更に、第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリークを構成することとして設定される。更に、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含む。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定される。第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。第1の判定モジュール403は、第1の判定サブモジュール又は第2の判定サブモジュールを有してよい。
第1の判定サブモジュールは、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きいか否かを判定し、第1の判定サブモジュールの判定結果が是であるとき、第1の判定モジュール403の判定結果が是であると決定するように構成される。
第2の判定サブモジュールは、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、第2の判定サブモジュールの判定結果が是であるとき、第1の判定モジュール403の判定結果が是であると決定するように構成される。
具体的な実施時には、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含んでよい。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定される。第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。更に、リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
本発明の本実施形態では、第2の判定サブモジュールは、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定してよい。例えば、各リソース周期においてターゲットリソースによって占用される第1の記憶リソース量を用いて増加変化線グラフが描出されてよく、第1の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。Mann-Kendallテスト法(Mannによって最初に提案され、更にKendallによって改良された)は、傾向をテストするために用いられるアルゴリズムである。線形回帰は、統計的な回帰分析を用いる統計的分析方法であり、線形関数モデリングの変種間の量的関係に基づく。Sen勾配推定法は、Henri Theil及びPranab K. Senによって提案された勾配推定アルゴリズムを参照する。
リーク場所決定モジュール404は、第1の判定モジュール403の判定結果が是であるとき、ターゲットコードの記憶場所をリソースリーク場所として決定するように構成される。
任意の実施方式では、第1の判定モジュール403の判定結果が是であるとき、すなわち、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所がリソースリーク場所として決定される。具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。
更に任意に、プログラムコードが複数のターゲットコードグループを含むとき、第1の事前設定された条件を満たすターゲットコードグループの数(Mとして記録)が、事前設定された量(Kとして記録:Kは、プログラム内のリソースリーク場所の事前設定された最大量)よりも大きい場合、ターゲットコードのK個の記憶場所が、第1の事前設定された条件を満たす複数のターゲットコードグループから、リソースリーク場所として決定されてよい。例えば、事前設定された量が3であり、第1の事前設定された条件を満たすターゲットコードのグループ数が5である。5は3よりも大きく、第1の事前設定された条件を満たすターゲットコードの5個のグループは、それぞれターゲットコード1、ターゲットコード2、ターゲットコード3、ターゲットコード4、ターゲットコード5である。ターゲットコード1の実行時、ターゲットリソース1が呼び出され、ターゲットリソース1によって占用される第1の記憶リソース量はリソース量1である。ターゲットコード2の実行時、ターゲットリソース2が呼び出され、ターゲットリソース2によって占用される第1の記憶リソース量がリソース量2である。ターゲットコード3の実行時、ターゲットリソース3が呼び出され、ターゲットリソース3によって占用される第1の記憶リソース量がリソース量3である。ターゲットコード4の実行時、ターゲットリソース4が呼び出され、ターゲットリソース4によって占用される第1の記憶リソース量がリソース量4である。ターゲットコード5の実行時、ターゲットリソース5が呼び出され、ターゲットリソース5によって占用される第1の記憶リソース量がリソース量5である。リソース量1、リソース量2、リソース量3、リソース量4及びリソース量5の値は、比較及びソートされてよい。比較結果がリソース量5>リソース量2>リソース量4>リソース量1>リソース量3である場合、比較的大きなリソース量の事前設定された量は、リソース量5、リソース量2及びリソース量4である。リソース量5、リソース量2、リソース量4に対応するターゲットコード5、ターゲットコード2、ターゲットコード4の記憶場所が、それぞれリソースリーク場所として決定されてよい。
更に任意に、本発明の本実施形態で提供される装置は更に、出力モジュールを備えてよい。
出力モジュールは、リソースリーク検出結果についての情報を出力するように構成される。
具体的な実施時には、リソースリーク検出結果についての情報は、ターゲットコードの属性情報、ターゲットリソースによって占用される第1の記憶リソース量、リソースリーク場所についての情報、リソースリーク呼出パスについての情報、リソースリーク呼出パスによって占用されるリソース量についての情報を含む。リソースリーク検出結果についての情報は、リソース割当て時に記録されてよい。リソースリーク検出結果についての情報を出力することにより、リソースリークの位置決め精度を向上させることができ、位置決め作業負荷を低減することができ、位置決め作業者の技能要求を低減することができる。加えて、研究室で再現を行う必要がなくなり、リソースリークの位置決め効率が向上する。
更に任意に、本発明の本実施形態で提供されるリソースリーク検出装置は更に、第2の取得モジュール405、第2の決定モジュール406、第2の判定モジュール407及びリークパス決定モジュール408を備えてよい。
第2の取得モジュール405は、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するように構成される。ターゲットリソースは、少なくとも2つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
具体的な実施時には、呼出パスは関数呼出スタックを用いて表現されてよく、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスが得られる。ターゲットリソースは少なくとも2つのターゲットサブリソースを含んでよい。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの部分リソースである。
更に任意に、論理呼出パスを得るために、特定の規則に従って呼出パスがマッピングされてよい。例えば、リーク場所決定モジュール404によって決定されたリソースリーク場所について、層タイプの数は、リソース割当てのための関数呼出スタックの階層数に基づいて分類して求めることができる。M個の論理呼出パスは各層タイプ毎に事前設定され、M個の論理呼出パスは0,1,2,…,M−1と付番される。リソース割当てのための関数呼出スタックの中間層のリターンアドレスが求められて整数に変換され、その後、Mを用いてモジュロ演算が行われ、得られた結果が論理呼出パス番号として用いられる。この場合、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得することができる。
第2の決定モジュール406は、ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定するように構成される。
具体的な実施時には、第2の決定モジュール406は、ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定してよい。例えば、第1の記憶リソース量は、メモリバイト数1000kbであり、ターゲットサブリソースが占める第1の記憶リソース量における比例値は200kbである。
第2の判定モジュール407は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するように構成される。第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される
任意の実施方式では、第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定される。第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含んでよい。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。更に、第2の判定モジュール407は、第3の判定サブモジュール又は第4の判定サブモジュールを有してよい。
第3の判定サブモジュールは、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された閾値よりも大きいか否かを判定し、第3の判定サブモジュールの判定結果が是であるとき、第2の判定モジュール407の判定結果が是であると決定するように構成される。
第4の判定サブモジュールは、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを判定し、第4の判定サブモジュールの判定結果が是であるとき、第2の判定モジュール407の判定結果が是であると決定するように構成される。
具体的な実施時には、第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含んでよい。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
本発明の本実施形態では、第4の判定サブモジュールは、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定してよい。例えば、各リソース周期においてターゲットサブリソースが占める第1の記憶リソース量における比例値を用いて増加変化線グラフが描出されてよく、第2の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて決定されてよい。
リークパス決定モジュール408は、第2の判定モジュール407の判定結果が是であるとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するように構成される。
任意の実施方式では、第2の判定モジュール407の判定結果が是であるとき、すなわち、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすと決定されたとき、リークパス決定モジュール408は、ターゲットサブリソースが呼び出される呼出パスを、リソースリーク呼出パスとして決定する。
更に任意に、本発明の本実施形態で提供されるリソースリーク検出装置は更に、第3の取得モジュール409、第3の決定モジュール410、第3の判定モジュール411及びリーク場所単位決定モジュール412を有してよい。
ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含む。各記憶場所単位はサブコードを記憶し、少なくとも2つの記憶場所単位に記憶されるサブコードが、ターゲットコードを構成する。
第3の取得モジュール409は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成される。少なくとも2つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成する。
具体的な実施時には、ターゲットコードの記憶場所は、具体的には、ターゲットコードが記憶されたファイルと、ターゲットコードの行番号とを含んでよい。ターゲットコードは、少なくとも2つの記憶場所単位を得るために、ファイル又は行番号に従って分類されてよい。更に任意に、記憶場所単位は、論理的位置を取得するために、特定の規則に従ってマッピングされてよい。例えば、N個の論理的位置がターゲットコード毎に事前設定され、N個の論理的位置は、0,1,2,…,N−1と付番される。ターゲットコードの記憶場所を表すファイル名と行番号が整数に変換され、整数が加算され(或いは、乗算等の別の演算を行う)、Nを用いてモジュロ演算が行われ、得られた結果が論理的位置番号として用いられ、それにより記憶場所単位を決定する。更に任意に、記憶場所単位は更に、割り当てられたリソースサイズ等の別の次元を参照して分割されてよい。例えば、記憶場所単位は、割り当てられたメモリブロックのバイト数に基づいて、一定数のブロックタイプに分割されてよい。
第3の決定モジュール410は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値を決定するように構成される。
具体的な実施時には、第3の決定モジュール410は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値を決定してよい。例えば、第1の記憶リソース量はメモリバイト数1000kbであり、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値は20kbである。
第3の判定モジュール411は、比例値が第3の事前設定された条件を満たすか否かを判定するように構成される。第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が、リソースリークを構成することとして設定される。
任意の実施方式では、第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が、リソースリークを構成することとして設定される。更に、第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含む。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。第3の判定モジュール411は、第5の判定サブモジュール又は第6の判定サブモジュールを有してよい。
第5の判定サブモジュールは、比例値が第3の事前設定された閾値よりも大きいか否かを判定し、第5の判定サブモジュールの判定結果が是であるとき、第3の判定モジュール411の判定結果が是であると決定するように構成される。
第6の判定サブモジュールは、比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定するように構成される。リソース周期は、第1の記憶リソース量の占用される周期である。且つ、第6の判定サブモジュールの判定結果が是であるとき、第3の判定モジュール411の判定結果が是であると決定するように構成される。
具体的な実施時には、第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含んでよい。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルであり、具体的には、ターゲットリソースの割当ての申請時とリソース解放の終了時との間の間隔であってよい。
本発明の本実施形態では、第6の判定サブモジュールは、比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定し、比例値がリソース周期において第3の事前設定された増加規則を満たす場合、比例値が第3の事前設定された条件を満たすと決定してよい。各リソース周期において比例値を用いて増加変化線グラフが描出されてよく、第3の事前設定された増加規則が満たされるか否かは、増加変化曲線を用いて判定されてよい。具体的な実施時には、比例値がリソース周期において第3の事前設定された増加規則を満たすか否かは、Mann-Kendallテスト法、線形回帰、Sen勾配推定法等のアルゴリズムを用いて判定されてよい。
リーク場所単位決定モジュール412は、第3の判定モジュール411の判定結果が是であるとき、記憶場所単位をリソースリーク場所単位として決定するように構成される。
任意の実施方式では、第3の判定モジュール411の判定結果が是であるとき、すなわち、比例値がリソース周期において第3の事前設定された増加規則を満たすと決定されたとき、リーク場所単位決定モジュール412は、記憶場所単位をリソースリーク場所単位として決定してよい。
本発明の本実施形態を実施することにより、プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得し、ターゲットリソースによって占用される第1の記憶リソース量を決定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、ターゲットコードはプログラムコードの部分コードである。プログラムの全てのコードを追跡する必要がなく、ターゲットコードの実行時に呼び出されるターゲットリソースのみを検出することが必要となる、また、全てのリソース割当てと解放を追跡する必要がなく、性能スオーバーヘッドが低く、通常のサービス実行に影響が出ない。このように、プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、オーバヘッドが低減され、リソースリーク検出効率が改善される。
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、リソースリーク場所を検出することができ、それによりリソースリーク検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
更に、ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを得ることができ、ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定することができる。ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定されたとき、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定することができる。このように、呼出パスを追跡することができ、更に、検出により、呼出パスをリソースリーク呼出パスとして決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。
更に、ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含んでよい。記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが取得されてよい。記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値が決定され、比例値が第3の事前設定された条件を満たすと決定されたとき、記憶場所がリソースリーク場所単位として決定される。このように、ターゲットコードの記憶場所の記憶場所単位を追跡することができ、更に、検出により、記憶場所単位をリソースリーク場所単位として決定することができる。このように、リソースリークを更に位置付けることができ、リソースリークの検出精度が改善される。
留意すべきこととして、第1の取得モジュール、第1の決定モジュール、第1の判定モジュール及びリーク場所決定モジュールは、独立して設けられるプロセッサであってよく、検出端末のプロセッサに組み込まれることによって実装されてよく、或いは、プログラムコードの形式で検出端末のメモリに記憶されてよい。第2の取得モジュール、第2の決定モジュール、第2の判定モジュール及びリークパス決定モジュールは、データ収集モジュールと同様に実装され、ここでは説明を省略する。第3の取得モジュール、第3の決定モジュール、第3の判定モジュール及びリーク場所単位決定モジュールは、データ収集モジュールと同様に実装され、ここでは説明を省略する。検出端末のプロセッサは、前述のモジュールの機能を呼び出して実行する。プロセッサは、中央処理装置(Central Processing Unit,CPU)、或いは特定用途向け集積回路(Application Specific Integrated Circuit,ASIC)、或いは本発明の実施形態を実現するように構成される1つ以上の集積回路であってよい。
図5を参照する。図5は、本発明の実施形態に係る検出端末の概略構造図である。本実施形態で提供される検出端末は、図1〜図3のいずれか1つに示される方法に対応し、図1〜図3のいずれか1つに示されるリソースリーク検出方法を実行するエンティティである。図5には、具体的な実現形式が示される。本発明の本実施形態における検出端末は、受信器501、送信器502、メモリ503及びプロセッサ504を備える。受信器501、送信器502及びメモリ503は、全てプロセッサ504に接続される。例えば、受信器501、送信器502及びメモリ503は、バスを用いてプロセッサ504に接続されてよい。当然ながら、検出端末は、アンテナ、ベースバンド処理コンポーネント、中間周波処理コンポーネント、入出力装置等の汎用部品を更に備えてよく、本発明の本実施形態では特に限定されない。
受信器501及び送信器502は、一体化してトランシーバを構成してよい。
メモリ503は、実行可能プログラムコードを記憶するように構成される。プログラムコードはコンピュータ動作命令を含む。メモリ403は、高速RAMメモリを含んでよく、更に、少なくとも1つの磁気ディスクメモリ等の不揮発性メモリ(non-volatile memory)を含んでよい。
プロセッサ504は、中央処理装置又は特定用途向け集積回路であってよく、或いは、本発明の実施形態を実現する1つ以上の集積回路として構成されてよい。
メモリ503はプログラムコードグループを記憶し、プロセッサ504は、メモリ503に記憶されたプログラムコードを呼び出して、以下の動作すなわち
プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、ターゲットコードはプログラムコードの部分コードである、ステップと、
ターゲットリソースによって占用される第1の記憶リソース量を決定するステップと、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップであって、第1の事前設定された条件は、ターゲットリソースによって占用される第1の記憶リソース量がリソースリークを構成することとして設定される、ステップと、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たす場合、ターゲットコードの記憶場所をリソースリーク場所として決定するステップと、
を実行する。
任意の実施方式では、ターゲットリソースは少なくとも2つのターゲットサブリソースを含む。ターゲットサブリソースは、ターゲットコードを実行するプロセスで呼び出されるターゲットリソースの一部のリソースである。プロセッサ504は更に、
ターゲットコードの実行時にターゲットサブリソースが呼び出される呼出パスを取得するように構成され、
ターゲットサブリソースが占める第1の記憶リソース量における比例値を決定するように構成され、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するように構成され、第2の事前設定された条件は、ターゲットサブリソースが占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定され、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たす場合、ターゲットサブリソースが呼び出される呼出パスをリソースリーク呼出パスとして決定するように構成される。
任意の実施方式では、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含む。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定される。第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ504が、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップは、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、
を含む。
任意の実施方式では、第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含む。第2の事前設定された閾値は、第1の記憶リソース量の比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第2の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ504が、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された条件を満たすか否かを判定するステップは、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、第2の事前設定された閾値よりも大きいか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された閾値よりも大きい場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定するステップ、又は、
ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たすか否かを判定し、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソース周期において第2の事前設定された増加規則を満たす場合、ターゲットサブリソースが占める第1の記憶リソース量における比例値が第2の事前設定された条件を満たすと決定するステップ、
を含む。
任意の実施方式では、ターゲットコードの記憶場所は、少なくとも2つの記憶場所単位を含む、各記憶場所単位はサブコードを記憶し、少なくとも2つの記憶場所単位に記憶されるサブコードが、ターゲットコードを構成する。プロセッサ504は更に、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成され、少なくとも2つの記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースが、ターゲットリソースを構成し、
記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値を決定するように構成され、
比例値が第3の事前設定された条件を満たすか否かを判定するように構成され、第3の事前設定された条件は、記憶場所単位に記憶されたサブコードの実行時に呼び出されるターゲットサブリソースの占める第1の記憶リソース量における比例値がリソースリークを構成することとして設定され、
比例値が第3の事前設定された条件を満たす場合、記憶場所単位をリソースリーク場所単位として決定するように構成される。
任意の実施方式では、第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含む。第3の事前設定された閾値は、ターゲットサブリソースが占める第1の記憶リソース量における比例値が、リソースリークを構成する、ターゲットサブリソースが占める第1の記憶リソース量における比例値の最小値よりも大きいこととして設定される。第3の事前設定された増加規則は、ターゲットサブリソースが占める第1の記憶リソース量における比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ504が、比例値が第3の事前設定された条件を満たすか否かを判定するステップは、
比例値が第3の事前設定された閾値よりも大きいか否かを判定し、比例値が第3の事前設定された閾値よりも大きい場合、比例値が第3の事前設定された条件を満たすと決定するステップ、又は、
比例値がリソース周期において第3の事前設定された増加規則を満たすか否かを判定し、比例値がリソース周期において第3の事前設定された増加規則を満たす場合、比例値が第3の事前設定された条件を満たすと決定するステップ、
を含む。
前述の技術的解決策では、受信器、送信器、メモリ及びプロセッサを備える検出端末が提供される。プロセッサは、プログラムのターゲットコードの実行時に呼び出されるターゲットリソース、ターゲットリソースによって占用される第1の記憶リソース量を決定することができ、また、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定されたとき、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。このように、プログラムのターゲットコードを追跡することができ、更に、検出により、ターゲットコードの記憶場所をリソースリーク場所として決定することができる。全てのリソース割当てと解放を追跡する必要がなく、よって性能オーバヘッドが低減される。
更に、プログラムのテスト段階又はデバッグ段階だけでなく、プログラムが実際に動作するオンライン環境においても、リーク検出を実行することができる。したがって、プログラムが正式に動作しているときに発生するリソースリーク問題を検出することができる。本発明の本実施形態では、プログラムのターゲットコードを追跡し、リソースリーク場所を検出することができ、それによりリソースリーク検出精度が改善される。プログラムが実際に動作するオンライン環境でリソースリーク検出を行うことができ、それにより偽陰性率が低下し、リソースリーク検出効率が改善される。
図6を参照する。図6は、本発明の実施形態に係るリソースリーク検出システムの概略構造図である。図に示されるように、本発明の本実施形態で更に提供されるリソースリーク検出システムは、メモリ601、リソースリーク検出装置602及び表示装置603を備えてよい。メモリ601は、リソースリーク検出プログラムを記憶するように構成される。リソースリーク検出装置602は、メモリ601に記憶されたリソースリーク検出プログラムを実行して、図1〜図3のいずれか1つに示されるリソースリーク検出方法を実行するように構成される。表示装置603は、リソースリーク検出装置によって得られたリソースリーク検出結果を表示するように構成される。更に、表示装置603は、表示パネルを有してよい。例えば、表示パネルは、LCD(Liquid Crystal Display、液晶ディスプレイ)、OLED(Organic Light Emitting Diode、有機発光ダイオード)等の形で構成されてよい。更に、リソースリーク検出装置によって取得され表示装置603によって表示されるリソースリーク検出結果は、リソースリーク場所、リソースリーク呼出パス、リソースリーク場所単位等を含んでよい。リソースリーク検出装置602の構造及び機能については、図4に示される実施形態の関連説明を参照することができ、ここでは詳細な説明を省略する。留意すべきこととして、本実施形態で提供される装置は、図1〜図3のいずれか1つのリソースリーク検出方法に対応する。
本願で提供されるいくつかの実施形態では、開示された装置及び方法は、他の方法で実現されてもよいことが理解されるべきである。例えば、説明された装置の実施形態は例示に過ぎない。例えば、モジュール又はユニットの分割は、論理機能の分割に過ぎず、実際の実施では他の分割であってよい。例えば、複数のユニット又はモジュールは別のシステムに組み合わせ、或いは統合されてよい。或いは、一部の機能は無視されるか、或いは実行されなくてよい。加えて、表示又は議論された相互結合又は直接結合又は通信接続は、いくつかのインタフェースを用いて実現されてよい。装置、モジュール又はユニット間の間接結合又は通信接続は、電子的、機械的その他の形式で実施されてよい。
別個の部品として記載されたモジュール又はユニットは、物理的に分離していてもいなくてもよく、モジュール又はユニットとして表示された部品は物理的なモジュール又はユニットであってもなくてもよく、1つの位置に配置されてもよいし、複数のネットワークモジュール又はユニットに分散されてもよい。これらのモジュール又はユニットの一部又は全部は、本願の実施形態の解決策の目的を達成するために実際の必要に応じて選択されてよい。
加えて、本発明の実施形態における機能モジュール又はユニットは、1つの処理モジュール又はユニットに統合されてよい。或いは、モジュール又はユニットの各々は、物理的に単独で存在してよい。或いは、2つ以上のモジュール又はユニットは、1つのモジュール又はユニットに統合される。統合されたモジュール又はユニットは、ハードウェアの形式で実現されてよく、或いは、ソフトウェア機能ユニットの形式で実現されてよい。
統合されたモジュール又はユニットがソフトウェア機能モジュール又はユニットの形で実現され、独立した製品として販売或いは使用される場合、統合されたモジュール又はユニットはコンピュータ可読記憶媒体に記憶されてよい。そのような理解に基づき、本発明の技術的解決策は本質的に、或いは先行技術に寄与する部分や、技術的解決策の全部又は一部は、ソフトウェア製品の形式で実現することができる。コンピュータソフトウェア製品は、記憶媒体に記憶され、コンピュータ装置(パーソナルコンピュータ、サーバ、或いはネットワーク装置であってよい)に、本願の実施形態で説明された方法のステップの全部又は一部を実行するよう指示するためのいくつかの命令を含む。上記の記憶媒体は、USBフラッシュドライブ、リムーバブルハードディスク、リードオンリメモリ(ROM、Read-Only Memory)、ランダムアクセスメモリ(RAM、Random Access Memory)、磁気ディスク、光ディスク等の、プログラムコードを記憶できる任意の媒体を含む。
以上の説明は、本願の具体的な実施方式に過ぎず、本願の保護範囲を限定するものではない。本願に開示された技術的範囲内で当業者が容易に想到できる変形又は置換は、いかなるものも本願の保護範囲に包含されるものとする。したがって、本願の保護範囲は、特許請求の範囲の保護範囲に属するものとする。
メモリ503は、実行可能プログラムコードを記憶するように構成される。プログラムコードはコンピュータ動作命令を含む。メモリ503は、高速RAMメモリを含んでよく、更に、少なくとも1つの磁気ディスクメモリ等の不揮発性メモリ(non-volatile memory)を含んでよい。
任意の実施方式では、第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含む。第1の事前設定された閾値は、第1の記憶リソース量がリソースリークを構成する第1の記憶リソース量の最小値よりも大きいこととして設定される。第1の事前設定された増加規則は、第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定される。リソース周期は、ターゲットリソースが記憶空間を占用するライフサイクルである。プロセッサ504が、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップは、
ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きいか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された閾値よりも大きい場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、又は、
ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たすか否かを判定し、ターゲットリソースによって占用される第1の記憶リソース量が、リソース周期において第1の事前設定された増加規則を満たす場合、ターゲットリソースによって占用される第1の記憶リソース量が第1の事前設定された条件を満たすと決定するステップ、
を含む。

Claims (13)

  1. リソースリーク検出方法であって、
    プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するステップであって、前記ターゲットコードはプログラムコードの部分コードである、ステップと、
    前記ターゲットリソースによって占用される第1の記憶リソース量を決定するステップと、
    前記ターゲットリソースによって占用される前記第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するステップであって、前記第1の事前設定された条件は、前記ターゲットリソースによって占用される前記第1の記憶リソース量がリソースリークを構成することとして設定される、ステップと、
    前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された条件を満たす場合、前記ターゲットコードの記憶場所をリソースリーク場所として決定するステップと、
    を含む方法。
  2. 前記ターゲットリソースは少なくとも2つのターゲットサブリソースを含み、前記ターゲットサブリソースは、前記ターゲットコードを実行するプロセスにおいて呼び出される、前記ターゲットリソースの部分リソースであり、
    前記方法は、
    前記ターゲットコードの実行時に前記ターゲットサブリソースが呼び出される呼出パスを取得するステップと、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における比例値を決定するステップと、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、第2の事前設定された条件を満たすか否かを判定するステップであって、前記第2の事前設定された条件は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、ステップと、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が前記第2の事前設定された条件を満たす場合、前記ターゲットサブリソースが呼び出される前記呼出パスをリソースリーク呼出パスとして決定するステップと、
    を更に含む、請求項1に記載の方法。
  3. 前記第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含み、前記第1の事前設定された閾値は、前記第1の記憶リソース量がリソースリークを構成する前記第1の記憶リソース量の最小値よりも大きいこととして設定され、前記第1の事前設定された増加規則は、前記第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
    前記ターゲットリソースによって占用される前記第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定する前記ステップは、
    前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された閾値よりも大きいか否かを判定し、前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された閾値よりも大きい場合、前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された条件を満たすと決定するステップ、又は、
    前記ターゲットリソースによって占用される前記第1の記憶リソース量が、前記リソース周期において前記第1の事前設定された増加規則を満たすか否かを判定し、前記ターゲットリソースによって占用される前記第1の記憶リソース量が、前記リソース周期において前記第1の事前設定された増加規則を満たす場合、前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された条件を満たすと決定するステップ、
    を含む、請求項1に記載の方法。
  4. 前記第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含み、前記第2の事前設定された閾値は、前記第1の記憶リソース量の比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第2の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、第2の事前設定された条件を満たすか否かを判定する前記ステップは、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、前記第2の事前設定された閾値よりも大きいか否かを判定し、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が前記第2の事前設定された閾値よりも大きい場合、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が前記第2の事前設定された条件を満たすと決定するステップ、又は、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、前記リソース周期において前記第2の事前設定された増加規則を満たすか否かを判定し、 前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、前記リソース周期において前記第2の事前設定された増加規則を満たす場合、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が前記第2の事前設定された条件を満たすと決定するステップ、
    を含む、請求項2に記載の方法。
  5. 前記ターゲットコードの前記記憶場所は、少なくとも2つの記憶場所単位を含み、前記記憶場所単位の各々はサブコードを記憶し、前記少なくとも2つの記憶場所単位に記憶された前記サブコードは前記ターゲットコードを構成し、
    前記方法は、
    前記記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースを取得するステップであって、前記少なくとも2つの記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースが、前記ターゲットリソースを構成する、ステップと、
    前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第1の記憶リソース量における比例値を決定するステップと、
    前記比例値が第3の事前設定された条件を満たすか否かを判定するステップであって、前記第3の事前設定された条件は、前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第1の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、ステップと、
    前記比例値が前記第3の事前設定された条件を満たす場合、前記記憶場所単位をリソースリーク場所単位として決定するステップと、
    を更に含む、請求項1に記載の方法。
  6. 前記第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含み、前記第3の事前設定された閾値は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第3の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
    前記比例値が前記第3の事前設定された条件を満たすか否かを判定する前記ステップは、
    前記比例値が前記第3の事前設定された閾値よりも大きいか否かを判定し、前記比例値が前記第3の事前設定された閾値よりも大きい場合、前記比例値が前記第3の事前設定された条件を満たすと決定するステップ、又は、
    前記比例値が前記リソース周期において前記第3の事前設定された増加規則を満たすか否かを判定し、前記比例値が前記リソース周期において前記第3の事前設定された増加規則を満たす場合、前記比例値が前記第3の事前設定された条件を満たすと決定するステップ、
    を含む、請求項5に記載の方法。
  7. リソースリーク検出装置であって、
    プログラムのターゲットコードの実行時に呼び出されるターゲットリソースを取得するように構成される第1の取得モジュールであって、前記ターゲットコードはプログラムコードの部分コードである、第1の取得モジュールと、
    前記ターゲットリソースによって占用される第1の記憶リソース量を決定するように構成される第1の決定モジュールと、
    前記ターゲットリソースによって占用される前記第1の記憶リソース量が第1の事前設定された条件を満たすか否かを判定するように構成される第1の判定モジュールであって、前記第1の事前設定された条件は、前記ターゲットリソースによって占用される前記第1の記憶リソース量がリソースリークを構成することとして設定される、第1の判定モジュールと、
    前記第1の判定モジュールの判定結果が、前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された条件を満たすことであるとき、前記ターゲットコードの記憶場所をリソースリーク場所として決定するように構成されるリーク場所決定モジュールと、
    を備える装置。
  8. 前記ターゲットリソースは少なくとも2つのターゲットサブリソースを含み、前記ターゲットサブリソースは、前記ターゲットコードを実行するプロセスにおいて呼び出される、前記ターゲットリソースの部分リソースであり、
    前記装置は、
    前記ターゲットコードの実行時に前記ターゲットサブリソースが呼び出される呼出パスを取得するように構成される第2の取得モジュールと、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における比例値を決定するように構成される第2の決定モジュールと、
    前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、第2の事前設定された条件を満たすか否かを判定するように構成される第2の判定モジュールであって、前記第2の事前設定された条件は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、第2の判定モジュールと、
    前記第2の判定モジュールの判定結果が是であるとき、前記ターゲットサブリソースが呼び出される前記呼出パスをリソースリーク呼出パスとして決定するように構成されるリークパス決定モジュールと、
    を更に備える、請求項7に記載の装置。
  9. 前記第1の事前設定された条件は、第1の事前設定された閾値又は第1の事前設定された増加規則を含み、前記第1の事前設定された閾値は、前記第1の記憶リソース量がリソースリークを構成する前記第1の記憶リソース量の最小値よりも大きいこととして設定され、前記第1の事前設定された増加規則は、前記第1の記憶リソース量のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
    前記第1の判定モジュールは、第1の判定サブモジュール又は第2の判定サブモジュールを有し、
    前記第1の判定サブモジュールは、前記ターゲットリソースによって占用される前記第1の記憶リソース量が前記第1の事前設定された閾値よりも大きいか否かを判定し、前記第1の判定サブモジュールの判定結果が是であるとき、前記第1の判定モジュールの判定結果が是であると決定するように構成され、
    前記第2の判定サブモジュールは、前記ターゲットリソースによって占用される前記第1の記憶リソース量が、前記リソース周期において前記第1の事前設定された増加規則を満たすか否かを判定し、前記第2の判定サブモジュールの判定結果が是であるとき、前記第1の判定モジュールの判定結果が是であると決定するように構成される、
    請求項7に記載の装置。
  10. 前記第2の事前設定された条件は、第2の事前設定された閾値又は第2の事前設定された増加規則を含み、前記第2の事前設定された閾値は、前記第1の記憶リソース量の比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第2の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
    前記第2の判定モジュールは、第3の判定サブモジュール又は第4の判定サブモジュールを有し、
    前記第3の判定サブモジュールは、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、前記第2の事前設定された閾値よりも大きいか否かを判定し、前記第3の判定サブモジュールの判定結果が是であるとき、前記第2の判定モジュールの判定結果が是であると決定するように構成され、
    前記第4の判定サブモジュールは、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、前記リソース周期において前記第2の事前設定された増加規則を満たすか否かを判定し、前記第4の判定サブモジュールの判定結果が是であるとき、前記第2の判定モジュールの判定結果が是であると決定するように構成される、
    請求項8に記載の装置。
  11. 前記ターゲットコードの前記記憶場所は、少なくとも2つの記憶場所単位を含み、前記記憶場所単位の各々はサブコードを記憶し、前記少なくとも2つの記憶場所単位に記憶された前記サブコードは前記ターゲットコードを構成し、
    前記装置は、
    前記記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースを取得するように構成される第3の取得モジュールであって、前記少なくとも2つの記憶場所単位に記憶された前記サブコードの実行時に呼び出されるターゲットサブリソースが、前記ターゲットリソースを構成する、第3の取得モジュールと、
    前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第1の記憶リソース量における比例値を決定するように構成される第3の決定モジュールと、
    前記比例値が第3の事前設定された条件を満たすか否かを判定するように構成される第3の判定モジュールであって、前記第3の事前設定された条件は、前記記憶場所単位に記憶された前記サブコードの実行時に呼び出される前記ターゲットサブリソースの占める前記第1の記憶リソース量における前記比例値がリソースリークを構成することとして設定される、第3の判定モジュールと、
    前記第3の判定モジュールの判定結果が是であるとき、前記記憶場所単位をリソースリーク場所単位として決定するように構成されるリーク場所単位決定モジュールと、
    を更に備える、請求項7に記載の装置。
  12. 前記第3の事前設定された条件は、第3の事前設定された閾値又は第3の事前設定された増加規則を含み、前記第3の事前設定された閾値は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値が、リソースリークを構成する、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値の最小値よりも大きいこととして設定され、前記第3の事前設定された増加規則は、前記ターゲットサブリソースが占める前記第1の記憶リソース量における前記比例値のリソース周期における増加傾向変化がリソースリークを構成することとして設定され、前記リソース周期は、前記ターゲットリソースが記憶空間を占用するライフサイクルであり、
    前記第3の判定モジュールは、第5の判定サブモジュール又は第6の判定サブモジュールを有し、
    前記第5の判定サブモジュールは、前記比例値が前記第3の事前設定された閾値よりも大きいか否かを判定し、前記第5の判定サブモジュールの判定結果が是であるとき、前記第3の判定モジュールの判定結果が是であると決定するように構成され、
    前記第6の判定サブモジュールは、前記比例値が前記リソース周期において前記第3の事前設定された増加規則を満たすか否かを判定するように構成され、前記リソース周期は前記第1の記憶リソース量の占用される周期であり、且つ、前記第6の判定サブモジュールの判定結果が是であるとき、前記第3の判定モジュールの判定結果が是であると決定するように構成される、
    請求項11に記載の装置。
  13. メモリ、リソースリーク検出装置及び表示装置を備えるリソースリーク検出システムであって、
    前記メモリは、リソースリーク検出プログラムを記憶するように構成され、
    前記リソースリーク検出装置は、前記メモリに記憶された前記リソースリーク検出プログラムを実行して、請求項1乃至6のいずれか一項に記載のリソースリーク検出方法を実行するように構成され、
    前記表示装置は、前記リソースリーク検出装置によって得られたリソースリーク検出結果を表示するように構成される、
    システム。
JP2017511234A 2014-08-26 2015-05-27 リソースリーク検出の方法、装置及びシステム Active JP6446125B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201410425600.2 2014-08-26
CN201410425600.2A CN105446871B (zh) 2014-08-26 2014-08-26 一种资源泄漏检测方法、装置及系统
PCT/CN2015/079872 WO2016029723A1 (zh) 2014-08-26 2015-05-27 一种资源泄漏检测方法、装置及系统

Publications (2)

Publication Number Publication Date
JP2017531852A true JP2017531852A (ja) 2017-10-26
JP6446125B2 JP6446125B2 (ja) 2018-12-26

Family

ID=55398725

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017511234A Active JP6446125B2 (ja) 2014-08-26 2015-05-27 リソースリーク検出の方法、装置及びシステム

Country Status (5)

Country Link
US (1) US10289472B2 (ja)
EP (1) EP3171274B1 (ja)
JP (1) JP6446125B2 (ja)
CN (1) CN105446871B (ja)
WO (1) WO2016029723A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073441B (zh) * 2016-11-14 2022-05-10 阿里巴巴集团控股有限公司 一种虚拟机内存监管方法与设备
CN107423213B (zh) * 2017-04-11 2020-12-18 腾讯科技(深圳)有限公司 一种文件描述符分配检测方法和装置
CN107957950B (zh) * 2017-12-08 2020-08-25 锐捷网络股份有限公司 一种系统资源泄露的检测方法和装置
US20190188154A1 (en) * 2017-12-15 2019-06-20 Intel Corporation Translation pinning in translation lookaside buffers
CN110837465A (zh) * 2019-10-15 2020-02-25 珠海金山网络游戏科技有限公司 一种基于Android的句柄泄露检测方法及其系统
CN112181830B (zh) * 2020-09-28 2022-08-09 厦门美柚股份有限公司 内存泄露的检测方法、装置、终端及介质
CN112631941B (zh) * 2020-12-31 2022-04-19 广州鲁邦通物联网科技股份有限公司 定位linux内核slub内存泄漏的方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001331368A (ja) * 2000-05-19 2001-11-30 Oki Electric Ind Co Ltd メモリ解放漏れ判定方法
WO2012122672A1 (en) * 2011-03-15 2012-09-20 Telefonaktiebolaget L M Ericsson (Publ) Detection on resource leakage
JP2013109756A (ja) * 2011-11-18 2013-06-06 Apple Inc データ処理システムのメモリ使用状況を追跡する方法
JP2014149606A (ja) * 2013-01-31 2014-08-21 Fujitsu Ltd 資源使用量集計プログラム、資源使用量集計方法及び資源使用量集計装置

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1248114C (zh) 2002-06-20 2006-03-29 华为技术有限公司 一种软件内存泄露的检查方法
JP4512402B2 (ja) * 2004-04-12 2010-07-28 株式会社日立製作所 メモリリークの原因箇所検出方法、及びその実行プログラム
US7774741B2 (en) * 2006-05-22 2010-08-10 Microsoft Corporation Automatically resource leak diagnosis and detecting process within the operating system
CN100504807C (zh) * 2006-10-13 2009-06-24 中兴通讯股份有限公司 一种通信设备系统中内存泄漏的检测方法
US8037477B2 (en) * 2007-01-23 2011-10-11 Hewlett-Packard Development Company, L.P. Efficient detection of sources of increasing memory consumption
CN101539870A (zh) 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN101615143B (zh) 2008-06-27 2013-04-17 国际商业机器公司 用于内存泄漏诊断的方法和装置
US8689180B2 (en) * 2009-11-03 2014-04-01 International Business Machines Corporation Systems and methods for resource leak detection
CN101908018B (zh) * 2010-07-20 2012-09-26 北京海泰方圆科技有限公司 一种判断内存泄露的系统及方法
US8467281B1 (en) 2010-09-17 2013-06-18 Emc Corporation Techniques for identifying devices having slow response times
US9064048B2 (en) * 2011-02-17 2015-06-23 Red Hat, Inc. Memory leak detection
US20130021176A1 (en) * 2011-07-18 2013-01-24 Belkin Internaitonal, Inc. Method of Handling Incoming Telephone Calls and Text Messages and Systems Therefor
US8881107B2 (en) * 2011-08-24 2014-11-04 Microsoft Corporation Automatic memory leak detection
CN102955719B (zh) 2011-08-31 2016-06-22 国际商业机器公司 疑似内存泄漏的确定方法及装置
US9104563B2 (en) * 2012-02-09 2015-08-11 Microsoft Technology Licensing, Llc Self-tuning statistical resource leak detection
CN103268287B (zh) * 2013-06-05 2017-03-15 福州瑞芯微电子股份有限公司 检测内存泄露的方法与装置
CN103268278B (zh) * 2013-06-14 2016-12-28 苏州国芯科技有限公司 支持多核处理器的sram控制器及其跟踪信息处理方法
CN103488544B (zh) 2013-09-26 2016-08-17 华为技术有限公司 检测慢盘的处理方法和装置
CN103810062B (zh) 2014-03-05 2015-12-30 华为技术有限公司 慢盘检测方法和装置
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001331368A (ja) * 2000-05-19 2001-11-30 Oki Electric Ind Co Ltd メモリ解放漏れ判定方法
WO2012122672A1 (en) * 2011-03-15 2012-09-20 Telefonaktiebolaget L M Ericsson (Publ) Detection on resource leakage
JP2013109756A (ja) * 2011-11-18 2013-06-06 Apple Inc データ処理システムのメモリ使用状況を追跡する方法
JP2014149606A (ja) * 2013-01-31 2014-08-21 Fujitsu Ltd 資源使用量集計プログラム、資源使用量集計方法及び資源使用量集計装置

Also Published As

Publication number Publication date
JP6446125B2 (ja) 2018-12-26
US10289472B2 (en) 2019-05-14
US20170168886A1 (en) 2017-06-15
EP3171274A1 (en) 2017-05-24
CN105446871B (zh) 2018-08-17
EP3171274A4 (en) 2017-08-02
EP3171274B1 (en) 2019-07-10
CN105446871A (zh) 2016-03-30
WO2016029723A1 (zh) 2016-03-03

Similar Documents

Publication Publication Date Title
JP6446125B2 (ja) リソースリーク検出の方法、装置及びシステム
CN108829610B (zh) 一种神经网络前向计算过程中的内存管理方法及设备
US10365964B1 (en) Data processing platform monitoring
JP6381170B2 (ja) 基数推定を介した結合パスの効率的な判定
US9397953B2 (en) Operation managing method for computer system, computer system and computer-readable storage medium having program thereon
CN111932257B (zh) 一种区块链并行化处理方法及装置
US10331660B1 (en) Generating a data lineage record to facilitate source system and destination system mapping
CN109324890B (zh) 资源管理方法、装置及计算机可读存储介质
US9275201B2 (en) Execution-based license discovery and optimization
KR20130088513A (ko) 멀티코어 시스템의 태스크 분배 방법 및 장치
US20160352821A1 (en) Method and system for allocating resources for virtual hosts
CN116467061B (zh) 一种任务执行的方法、装置、存储介质及电子设备
US7500079B2 (en) Detection of memory leaks
CN105677481B (zh) 一种数据处理方法、系统及电子设备
US10944814B1 (en) Independent resource scheduling for distributed data processing programs
US9317328B2 (en) Strategic placement of jobs for spatial elasticity in a high-performance computing environment
CN104123303A (zh) 一种提供数据的方法及装置
JP2012221034A (ja) メモリ管理装置、メモリ管理方法及びメモリ管理プログラム
CN114942833A (zh) 定时任务资源动态调度方法及相关装置
CN108197029A (zh) 一种获取进程信息的方法和设备
US20170147407A1 (en) System and method for prediciting resource bottlenecks for an information technology system processing mixed workloads
CN111352710B (zh) 进程管理方法及装置、计算设备、存储介质
US20160210170A1 (en) Computing CPU Time Usage of Activities Serviced by CPU
US20130290977A1 (en) Computational Resource Allocation System And A Method For Allocating Computational Resources For Executing A Scene Graph Based Application At Run Time
US20150295851A1 (en) Authorization review system

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180416

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180529

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180704

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181130

R150 Certificate of patent or registration of utility model

Ref document number: 6446125

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250