JP2011028711A - 異常検出方法、及び異常検出装置 - Google Patents
異常検出方法、及び異常検出装置 Download PDFInfo
- Publication number
- JP2011028711A JP2011028711A JP2009216067A JP2009216067A JP2011028711A JP 2011028711 A JP2011028711 A JP 2011028711A JP 2009216067 A JP2009216067 A JP 2009216067A JP 2009216067 A JP2009216067 A JP 2009216067A JP 2011028711 A JP2011028711 A JP 2011028711A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- value
- unit
- cpu
- abnormality detection
- 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.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】より高精度に異常を検出することができる異常検出方法、及び異常検出装置を提供する。
【解決手段】ソフトウェア(19)を実行して処理データをメモリ(16)上に展開し、前記メモリのメモリステータスを所定時間毎に記憶し、前記記憶したメモリステータスを所定の容量の複数のブロックに分割し、前記分割したブロック毎にメモリステータスの時間変化を解析し、前記解析の結果に基づいて異常を検出する。
【選択図】 図5
【解決手段】ソフトウェア(19)を実行して処理データをメモリ(16)上に展開し、前記メモリのメモリステータスを所定時間毎に記憶し、前記記憶したメモリステータスを所定の容量の複数のブロックに分割し、前記分割したブロック毎にメモリステータスの時間変化を解析し、前記解析の結果に基づいて異常を検出する。
【選択図】 図5
Description
本発明は、例えば、ソフトウェアにおける異常を検出するに基づいて異常検出方法、及び異常検出装置に関する。
コンピュータのプログラムを実行し、正しく動作するか否かを確認するソフトウェアテストが一般的に行われている。ソフトウェアテストは、プログラム中のバグ(欠陥)をできる限り多く発見することを目的として行われる。
ソフトウェアによる処理を行う場合、ソフトウェアのプログラムは、プロセス毎にメモリ領域を確保する。また、プログラムは、プロセスの処理を終了する場合、当該プロセスの処理用に確保したメモリ領域を開放する。しかし、プログラムにおけるバグにより、プロセスを終了したにも係らず、メモリ領域を開放しないメモリリークが発生する場合がある。メモリリークが発生する場合、メモリ不足による異常終了、及び処理速度の低下などが発生する。
特許文献1には、予め登録したメモリの監視領域を定期的に読み出すことにより、メモリ内容の時間的な変化を把握する技術が開示されている。
また、特許文献2には、メモリリーク監視タイミングにおいて、現期間のメモリ増加量の平均値と、過去期間のメモリの値の平均値とに基づいて、メモリリークによる増加率を検出する技術が開示されている。
上記の特許文献1に記載されている技術は、メモリ領域の時間的変化に基づいて、異常か否かを判断することができない。この為、表示されるメモリ領域の時間的変化に基づいて人が目視で異常の有無を確認する必要がある。この結果、異常を見逃す、手間がかかるなどの問題がある。
また、特許文献2に記載されている技術は、プロセス単位でしかメモリリークによるメモリ領域の増加率を確認することができない。この為、異常が発生しているメモリの領域を特定することが出来ないという問題がある。
また、カウンタが正常に終了されない為に、加算が継続されて行われる場合、または、メモリの値のオーバーフロー(桁あふれ)などを検知することが出来ないという問題がある。
そこで、本発明の目的は、より高精度に異常を検出することができる異常検出方法、及び異常検出装置を提供することにある。
本発明の一実施形態としての異常検出装置は、ソフトウェアを実行して処理データをメモリ上に展開するソフトウェア実行部と、前記メモリのメモリステータスを所定時間毎に記憶する記憶部と、前記記憶部により記憶したメモリステータスを所定の容量の複数のブロックに分割する分割部と、前記分割部により分割したブロック毎にメモリステータスの時間変化を解析する解析部と、前記解析部による解析の結果に基づいて異常を検出する異常検出部と、を具備する。
また、本発明の一実施形態としての異常検出方法は、ソフトウェアを実行して処理データをメモリ上に展開し、前記メモリのメモリステータスを所定時間毎に記憶し、前記記憶したメモリステータスを所定の容量の複数のブロックに分割し、前記分割したブロック毎にメモリステータスの時間変化を解析し、前記解析の結果に基づいて異常を検出する。
この発明の一形態によれば、より高精度に異常を検出することができる異常検出方法、及び異常検出装置を提供することができる。
以下、図面を参照しながら、本発明の第1の実施形態に係る異常検出方法、及び異常検出装置について詳細に説明する。
図1は、本発明の第1の実施形態に係るアプリケーションのテストを行う端末装置1の構成例について説明するためのブロック図である。
図1に示すように、端末装置1は、CPU11、入出力部12、ディスプレイ13、キーボード14、ROM15、RAM16、記憶部17、及びデバッグI/F18など備える。
図1に示すように、端末装置1は、CPU11、入出力部12、ディスプレイ13、キーボード14、ROM15、RAM16、記憶部17、及びデバッグI/F18など備える。
CPU11は、端末装置1全体の制御を司る制御部として機能する。CPU11は、ROM15あるいは記憶部17に記憶されている制御プログラム及び制御データに基づいて種々の処理を行う。
入出力部12は、例えばLANなどを介して外部の機器と通信を行うためのインタフェース、または、記憶媒体を接続可能なインタフェースにより構成される。
ディスプレイ13は、CPU11の制御により種々の情報を表示する。キーボード14は、端末装置1の操作者による操作を操作信号として受け取る。
ディスプレイ13は、CPU11の制御により種々の情報を表示する。キーボード14は、端末装置1の操作者による操作を操作信号として受け取る。
ROM15は、予め制御用のプログラム及び制御データなどを記憶する不揮発性のメモリである。CPU11は、ROM15、または記憶部17に記憶されているプログラムを実行することにより、種々の処理を実現することができる。
RAM16は、ワーキングメモリとして機能する揮発性のメモリである。RAM16は、CPU11の処理中のデータなどを一時的に格納する。例えば、RAM16は、入出力部12を介して受信したデータを一時的に格納する。また、RAM16は、CPU11が実行するプログラムを一時的に格納する。
記憶部17は、例えば、EEPROMまたはHDDなどのデータの書き込み及び書換えが可能な不揮発性のメモリにより構成される。
デバッグI/F18は、ソフトウェア19とのデータの送受信を行うためのインタフェースである。デバッグI/F18は、ソフトウェア19のデータの入出力を管理する。ソフトウェア19は、操作入力のデータに対して処理結果を出力するソフトウェアである。CPU11は、ソフトウェア実行部として機能する。CPU11は、ソフトウェア19を実行することにより、所定の処理を行う。
また、記憶部17は、例えば図2に示すようなファイルを記憶する。
図2は、図1に示す記憶部17に記憶されているファイルの例について説明するための説明図である。
図2は、図1に示す記憶部17に記憶されているファイルの例について説明するための説明図である。
図2に示すように、記憶部17は、シンボルファイル171、記録用プログラム172、メモリステータス格納部173、及び解析用プログラム174などを記憶する。なお、CPU11は、記録用プログラム172を実行することにより、記憶処理を行う。また、CPU11は、解析用プログラム174を実行することにより、解析処理を行う。
シンボルファイル171は、ソフトウェア19のソースコード及びそのアドレスとRAM16上のアドレスとを対応付けるファイルである。CPU11は、ソフトウェア19をRAM16上にコンパイルする場合、シンボルファイル171を生成し、記憶部17に記憶する。CPU11は、RAM16上のアドレスに基づいて、ソフトウェア19におけるソースコード及びそのアドレスを認識することができる。
記録用プログラム172は、RAM16のステータスを所定時間(保存時間)毎にメモリステータス格納部173に格納する為のプログラムである。CPU11は、ソフトウェア19を実行する場合、同時に記録用プログラム172を実行する。
CPU11は、記録用プログラム172を実行する場合、ソフトウェア19により使用されるRAM16上の全ての領域の値を保存時間毎にメモリステータス格納部173に記憶する。なお、CPU11は、キーボード14などにより入力される情報に基づいて、記録用プログラム172における保存時間を設定する。
メモリステータス格納部173は、記録用プログラム172により記憶される各時間毎のメモリステータスを保持する。即ち、メモリステータス格納部173は、RAM16における同一のアドレスであり、且つ、異なる時間に記憶される複数のメモリステータスを保持する。
解析用プログラム174は、メモリステータス格納部173に格納される複数のメモリステータスを解析するためのプログラムである。CPU11は、ソフトウェア19を実行してから所定時間(観測時間)が経過した場合、解析用プログラム174を実行する。CPU11は、解析用プログラム174を実行する場合、解析部として機能する。なお、CPU11は、キーボード14などの入力部により入力される情報に基づいて、解析用プログラム174における観測時間を設定する。
CPU11は、解析用プログラム174を実行する場合、メモリステータス格納部173に記憶される複数のメモリステータスをそれぞれ所定容量(例えば4バイト)単位のブロックに分割する。この場合、CPU11は、分割部として機能する。CPU11は、異なる時間に記憶したメモリステータスにおける各ブロックのメモリの値を抽出し、アドレス毎に対応付ける。
これにより、CPU11は、分割したブロック毎に、ブロック内のメモリの値の時間変化を確認する。即ち、CPU11は、あるソースコードにより用いられるRAM16上のメモリの領域の時間変化をチェックする。
図3は、メモリステータス格納部173に格納されるメモリステータスの例について説明するための説明図である。
図3に示すように、メモリステータス格納部173は、複数の異なる時間に記憶されたメモリステータス1731乃至1735を格納する。
図3に示すように、メモリステータス格納部173は、複数の異なる時間に記憶されたメモリステータス1731乃至1735を格納する。
メモリステータス1731は、CPU11がソフトウェア19を実行してから1時間後に記憶されたRAM16の値である。メモリステータス1732は、CPU11がソフトウェア19を実行してから2時間後に記憶されたRAM16の値である。メモリステータス1733は、CPU11がソフトウェア19を実行してから3時間後に記憶されたRAM16の値である。メモリステータス1734は、CPU11がソフトウェア19を実行してから4時間後に記憶されたRAM16の値である。メモリステータス1735は、CPU11がソフトウェア19を実行してから5時間後に記憶されたRAM16の値である。
CPU11は、各メモリステータスを4バイト単位のブロックに分割する。CPU11は、分割したブロック毎に、メモリの値の時間的な変化を確認する。
例えば、図3に示す第1のブロックは、メモリステータス1731において「100」、メモリステータス1732において「201」、メモリステータス1733において「208」、メモリステータス1734において「100」、メモリステータス1735において「201」、と変化する。
また、例えば、図3に示す第2のブロックは、メモリステータス1731において「100」、メモリステータス1732において「201」、メモリステータス1733において「298」、メモリステータス1734において「388」、メモリステータス1735において「501」、と変化する。
CPU11は、各ブロック毎の時間に対するメモリの値の変化に基づいて、異常を検出する。即ち、CPU11は、異常検出部として機能する。
図4は、メモリのブロック毎の値と時間との関係を表すグラフである。
図4に示すように、第1のブロックの値は、通常の動作において生じる程度の増減が行われている。この為、CPU11は、異常が無いと判断する。
図4に示すように、第1のブロックの値は、通常の動作において生じる程度の増減が行われている。この為、CPU11は、異常が無いと判断する。
また、第2のブロックの値は、増加が継続している。この為、CPU11は、第2のブロックに関連するソースコードにおいて異常が存在すると判断する。
また、例えば、ブロックの値が予め設定される上限値を超える場合、オーバーフローが発生したと判断する。なお、CPU11は、キーボード14などにより入力される情報に基づいて、解析用プログラム174における上限値を設定する。
図5は、図1及び図2に示す端末装置1において行われる処理について概略的に説明するための説明図である。
まずCPU11は、デバッグI/F18を介してソフトウェア19を読み込み、RAM16上にコンパイルする。この場合、CPU11は、RAM16のアドレスと、ソフトウェア19のソースコードとを対応付けてシンボルファイル171を生成し、記憶部17に格納する。
まずCPU11は、デバッグI/F18を介してソフトウェア19を読み込み、RAM16上にコンパイルする。この場合、CPU11は、RAM16のアドレスと、ソフトウェア19のソースコードとを対応付けてシンボルファイル171を生成し、記憶部17に格納する。
ソフトウェア19の実行から記録用プログラム172において設定される保存時間が経過した場合、CPU11は、ソフトウェア19により使用されるRAM16のメモリ領域の値をメモリステータス格納部173に記憶する記憶処理を行う。CPU11は、この記憶処理を保存時間経過毎に行う。
ソフトウェア19の実行から解析用プログラム174により設定される観測時間が経過した場合、CPU11は、メモリステータス格納部173に格納される各時間毎のメモリステータスの解析処理を行う。即ち、解析用プログラム174は、各メモリステータスを4バイト単位のブロックに分割し、分割したブロック毎に、メモリの値の時間的な変化を確認する。
解析用プログラム174は、メモリの値が増加を続ける場合、メモリの値が予め設定される上限値を超える場合、または、所定時間以上メモリの値が変化しない場合、カウンタの暴走、桁あふれ、またはメモリリークなどの異常が発生している可能性があると判断する。解析用プログラム174は、CPU11に対して、異常を示す情報と、メモリのブロックのアドレスとを通知する。
CPU11は、異常が検知されたメモリのブロックのアドレスに基づいてバグを含む可能性のあるソースコードを特定する。即ち、CPU11は、シンボルファイル171を参照し、受信するアドレスを検索し、検索したアドレスに対応付けられているソースコードに関する情報を抽出する。
図6及び図7は、図1及び図2に示す端末装置において行われる異常検出処理について概略的に説明するためのフローチャートである。
まずCPU11は、デバッグI/F18を介してソフトウェア19を読み込み、RAM16上にコンパイルする。この場合、CPU11は、RAM16のアドレスと、ソフトウェア19のソースコードとを対応付けてシンボルファイル171を生成し、記憶部17に格納する。
まずCPU11は、デバッグI/F18を介してソフトウェア19を読み込み、RAM16上にコンパイルする。この場合、CPU11は、RAM16のアドレスと、ソフトウェア19のソースコードとを対応付けてシンボルファイル171を生成し、記憶部17に格納する。
CPU11は、まず、記憶処理を行う。CPU11は、記録用プログラム172の内容に基づいて、保存時間を設定する(ステップS11)。また、CPU11は、解析用プログラム174の内容に基づいて、観測時間を設定する(ステップS12)。さらに、CPU11は、解析用プログラム174の内容に基づいて、メモリの値の上限値を設定する(ステップS13)。
CPU11は、ソフトウェア19を実行してから観測時間が経過したか否か判断する(ステップS14)。観測時間が経過していない場合(ステップS14、NO)、CPU11は、ソフトウェア19により使用されるRAM16のメモリステータスをメモリステータス格納部173に記憶する(ステップS15)。さらに、CPU11は、メモリステータスを記憶する処理を行ってから保存時間の経過を待ち(ステップS16)、保存時間経過後、ステップS14に移行する。
ステップS14において、ソフトウェア19の実行から観測時間が経過した場合(ステップS14、YES)、図7に示す解析処理に移行する。
CPU11は、メモリステータス格納部173に記憶される複数のメモリステータスをそれぞれ所定容量のブロックに分割し、総ブロック数を確認する(ステップS21)。CPU11は、全てのブロックに対して解析処理を行ったか否か判定する(ステップS22)。
未解析のブロックが存在する場合(ステップS22、NO)、CPU11は、1つのアドレスのブロックについて、値の時間的変化を確認する(ステップS23)。即ち、CPU11は、異なる時間に記憶したメモリステータスにおける所定のアドレスに記憶されているブロックのメモリの値を抽出する。
CPU11は、抽出した複数の値に基づいて、増加が継続している状態か否か判断する(ステップS24)。即ち、CPU11は、図4に示すようにメモリの値が単調増加を続けている状態か否かを判断する。
増加が継続している場合(ステップS24、YES)、CPU11は、異常の可能性が有ると判断する(ステップS25)。即ち、CPU11は、例えば、カウンタの異常などの為にメモリの値が増加を続けていると判断する。この場合、CPU11は、異常の可能性を検出したメモリのアドレスを保持する。
また、CPU11は、メモリの値が予め設定される上限値を超えるか否か判定する(ステップS26)。メモリの値が予め設定される上限値を超える場合(ステップS26、YES)、CPU11は、異常が発生したと判断し(ステップS27)、ステップS22に移行し、次のブロックの解析に移行する。即ち、CPU11は、例えば、メモリの値がオーバーフローしたと判断する。この場合、CPU11は、異常の可能性を検出したメモリのアドレスを保持する。
増加が継続していない場合(ステップS24、NO)、または、メモリの値が予め設定される上限値を超えない場合(ステップS26、NO)、CPU11は、ステップS22に移行し、次のブロックの解析に移行する。
ステップS22において、全てのブロックに対して解析処理を行ったと判断した場合(ステップS22、YES)、CPU11は、解析処理を終了する。
CPU11は、上記の解析処理の結果において、異常が発生したと判断したブロックのアドレスに基づいて、シンボルファイル171を参照する。CPU11はシンボルファイル171から異常が発生したと判断したブロックのアドレスを検索し、検索したアドレスに対応付けられているソースコードに関する情報を抽出する。これにより、CPU11は、バグを含む可能性のあるソースコードを特定することができる。
上記したように、本実施形態に係る異常検出方法は、所定時間毎に展開されるメモリの値を記憶し、記憶したメモリ領域を所定単位のブロックに分割し、メモリの値の時間的変化をブロック毎に確認する。例えば、メモリの値が増加を続ける場合、メモリの値が予め設定される上限値を超える場合、または、所定時間以上メモリの値が変化しない場合、異常を検出する。
これにより、バグを含む可能性のあるソースコードを特定することができる。また、長時間運用した場合と同等のテスト結果を得ることができる。この結果、より高精度に異常を検出することができる異常検出方法、及び異常検出装置を提供することができる。
次に、第2の実施形態について説明する。なお、第2の実施形態は、記録処理及び解析処理の他の例である。第1の実施形態において説明した構成と同様の構成については、詳細な説明を省略する。
第2の実施形態に係る記憶部15は、第1の実施形態と同様に、シンボルファイル171、記録用プログラム172、メモリステータス格納部173、及び解析用プログラム174などを記憶する。
記録用プログラム172は、RAM16のステータス(メモリの値)を所定時間(保存時間)毎にメモリステータス格納部173に格納する為のプログラムである。CPU11は、ソフトウェア19を実行する場合、同時に記録用プログラム172を実行する。
CPU11は、記録用プログラム172を実行する場合、ソフトウェア19により使用されるRAM16上の全ての領域(ブロック)の値を保存時間毎にメモリステータス格納部173に記憶する。この場合、CPU11は、前回メモリステータス格納部173に記憶した情報に上書きする。なお、CPU11は、例えば、キーボード14などにより入力される情報に基づいて、記録用プログラム172における保存時間を設定する。
メモリステータス格納部173は、記録用プログラム172により記憶されるメモリステータスと、解析処理の結果に応じた情報を対応付けて保持する。
解析用プログラム174は、メモリステータス格納部173に格納されるメモリステータスと、RAM16のステータスとに基づいて解析処理を行うプログラムである。CPU11は、ソフトウェア19を実行してから所定時間が経過した場合、解析用プログラム174を実行する。CPU11は、解析用プログラム174を実行する場合、解析部として機能する。
メモリステータス格納部173に記憶される複数のメモリステータスをそれぞれ所定容量(例えば4バイト)単位のブロックに分割する。この場合、CPU11は、分割部として機能する。
CPU11は、解析用プログラム174を実行する場合、RAM16のステータスとメモリステータス格納部173に記憶されるメモリステータスとを対応するブロック毎に比較する。即ち、CPU11は、RAM16のステータスとメモリステータス格納部173に記憶されるメモリステータスとで同じアドレスのブロック毎に、メモリの値の比較を行う。
CPU11は、記録用プログラム172により記録処理を行う場合、上記の比較に用いたRAM16上のメモリの値を、メモリステータス格納部173に格納されているメモリの値に上書きする。即ち、CPU11は、メモリステータス格納部173に格納されている前回のメモリの値に、今回のメモリの値を上書きする。
即ち、CPU11は、解析用プログラム174により解析処理を行う場合、前回記録したRAM16の各ブロック毎のメモリの値と、今回記録するRAM16の各ブロック毎のメモリの値とを比較する。
CPU11は、メモリの値が連続して増加する回数を各ブロック毎にカウントする機能を有する。CPU11は、カウントした値を解析処理の結果に応じた情報として各ブロックの値に対応付けてメモリステータス格納部173に記憶する。
CPU11は、前回記録したRAM16の各ブロック毎のメモリの値と、今回記録するRAM16の各ブロック毎のメモリの値とを比較し、今回記録するRAM16の各ブロック毎のメモリの値が前回記録したRAM16の各ブロック毎のメモリの値より大きい場合、メモリの値が増加したと判断する。CPU11は、メモリの値が増加したと判断したブロックのカウント(増加回数)を「1」加算する。
また、CPU11は、今回記録するRAM16の各ブロック毎のメモリの値と、前回記録したRAM16の各ブロック毎のメモリの値とが等しい場合、メモリの値が変化していないと判断する。この場合、CPU11は、メモリの値が変化していないと判断したブロックのカウントを変更しない。
またさらに、CPU11は、今回記録するRAM16の各ブロック毎のメモリの値が前回記録したRAM16の各ブロック毎のメモリの値より小さい場合、メモリの値が減少したと判断する。この場合、CPU11は、メモリの値が減少したと判断したブロックのカウントをリセットする。即ち、「0」にする。
CPU11は、例えば、キーボード14などにより入力される情報に基づいて、予め警告条件を設定する。即ち、CPU11は、メモリの値が連続して増加する回数(増加回数)に閾値を設定する。
CPU11は、各ブロック毎にカウントした値の何れかが予め設定される閾値を超える場合、異常を検出する。CPU11は、異常を検出する場合、操作者に警告を報知する。これにより、メモリにおいて発生する異常を操作者に報知することができる。
なお、CPU11は、例えば、キーボード14などにより入力される情報に基づいて、解析用プログラム174により分割するブロックの容量、及び警告方式などを設定する。
これにより、CPU11は、分割したブロック毎に、ブロック内のメモリの値の時間変化を解析することができる。即ち、CPU11は、あるソースコードにより用いられるRAM16上のメモリの領域の時間変化をチェックする。
CPU11は、解析処理及び記録処理完了後、保存時間が経過する場合、上記の解析処理と記録処理とを再び行う。
なお、RAM16のステータスを所定時間(保存時間)毎にメモリステータス格納部173に格納するとして説明したが、この構成に限定されない。例えば、RAM16のステータスをメモリステータス格納部173に格納する時刻を予め設定する構成であってもよい。
図8に示す例によると、CPU11は、RAM16のメモリ領域を、第1のブロックから第6のブロックの6つのブロックに分割している。
CPU11は、テスト開始から保存時間経過後において一回目の処理を行う。この場合、CPU11は、RAM16のメモリの値を各ブロック毎にメモリステータス格納部173に格納する。また、この場合、CPU11は、比較の対象が存在しないため、解析用プログラム174を実行しない。
この結果、図8に示す保存データ1736−1と増加回数1736−1とがメモリステータス格納部173に格納される。
一回目の処理から予め設定される保存時間経過後、CPU11は、二回目の処理を行う。この場合、CPU11は、RAM16の各ブロックの値と、メモリステータス格納部173に格納されている保存データ1736−1とで各ブロック毎に値の比較を行う。CPU11は、比較結果に応じて各ブロック毎の増加回数を示す情報を生成する。
図8に示す例では、第1のブロック、第5のブロック、及び第6のブロックにおいて今回のメモリの値が前回のメモリの値より大きい為、増加回数が加算されている。
CPU11は、比較に用いたRAM16の各ブロックの値を保存データ1736−1に上書きする。また、CPU11は、各ブロック毎の増加回数を示す情報を増加回数1736−1に上書きする。
この結果、図8に示す保存データ1736−2と増加回数1736−2とがメモリステータス格納部173に格納される。
二回目の処理から予め設定される保存時間経過後、CPU11は、三回目の処理を行う。この場合、CPU11は、RAM16の各ブロックの値と、メモリステータス格納部173に格納されている保存データ1736−2とで各ブロック毎に値の比較を行う。CPU11は、比較結果に応じて各ブロック毎の増加回数を示す情報を生成する。
図8に示す例では、第1のブロック、第2のブロック、及び第4のブロックにおいて今回のメモリの値が前回のメモリの値より大きい為、増加回数が加算されている。また、第5のブロックにおいて今回のメモリの値が前回のメモリの値より小さい為、増加回数がリセットされている。また、今回の第6のブロックのメモリの値は、前回のメモリの値と同じ値である為、増加回数が変更されていない。
CPU11は、比較に用いたRAM16の各ブロックの値を保存データ1736−2に上書きする。また、CPU11は、各ブロック毎の増加回数を示す情報を増加回数1736−2に上書きする。
この結果、図8に示す保存データ1736−3と増加回数1736−3とがメモリステータス格納部173に格納される。CPU11は、上記の処理を記録用プログラム172及び解析用プログラム174が終了されるまで繰り返し行う。
ここで、カウンタの値、即ち増加回数が大きい値の場合、減少することなく連蔵してメモリの値が増加したと判断することができる。ここから、今後もメモリの値が増加する可能性が高いと予想することができる。そこで、上記したように閾値を設定することにより、異常を検出し、操作者に対して警告を行うことができる。
CPU11は、各ブロック毎にカウントした値の何れかが予め設定される閾値を超える場合、異常を検出する。CPU11は、異常を検出する場合、予め設定される警告方式により操作者に警告を報知する。これにより、メモリにおいて発生する異常を操作者に報知することができる。端末装置1は、ディスプレイ13に異常の内容を表示する、警告音を発する、または、メールを送信するなどにより操作者に対して警告を報知する。
なお、CPU11は、閾値を各ブロック毎に設けてもよい。閾値を各ブロック毎に設ける場合、ブロックに対応するソフトウェア19の構文の特性に応じて閾値を設定することができる。これにより、例えば、常に一定値であるブロックに対して閾値を低く設定することができる。また、例えば、加算処理の結果が書き込まれるブロックに対して閾値を高く設定することができる。
図9及び図10は、図8に示すデータに基づいて行われる異常検出処理の例について概略的に説明するためのフローチャートである。
まずCPU11は、デバッグI/F18を介してソフトウェア19を読み込み、RAM16上にコンパイルする。この場合、CPU11は、RAM16のアドレスと、ソフトウェア19のソースコードとを対応付けてシンボルファイル171を生成し、記憶部17に格納する。
まずCPU11は、デバッグI/F18を介してソフトウェア19を読み込み、RAM16上にコンパイルする。この場合、CPU11は、RAM16のアドレスと、ソフトウェア19のソースコードとを対応付けてシンボルファイル171を生成し、記憶部17に格納する。
CPU11は、まず、種々の設定を行う。CPU11は、例えばキーボード14により入力される情報に基づいて、読み取り単位を設定する(ステップS31)。即ち、CPU11は、メモリステータス格納部173に記憶されるメモリステータスを分割する単位を設定する。この場合、CPU11は、総ブロック数を確認する。CPU11は、例えばキーボード14により入力される情報に基づいて、保存時間を設定する(ステップS32)。
さらに、CPU11は、例えばキーボード14により入力される情報に基づいて、警告条件を設定する(ステップS33)。即ち、CPU11は、メモリの値の増加回数に対して閾値を設定する。またさらに、CPU11は、例えばキーボード14により入力される情報に基づいて、警告方式を設定する(ステップS34)。
CPU11は、ソフトウェア19を実行してから保存時間の経過を待つ状態を維持する(ステップS35)。保存時間が経過した場合(ステップS35、YES)、CPU11は、ソフトウェア19により使用されるRAM16のメモリステータス、即ち、今回のメモリの値を確認する(ステップS36)。
さらに、CPU11は、メモリステータス格納部173に記憶されているメモリステータス、即ち、前回のメモリの値を読み出す(ステップS37)。
CPU11は、読み出した前回のメモリの値と、今回のメモリの値とを比較する(ステップS38)。
CPU11は、今回のメモリの値が前回のメモリの値より大きい場合、メモリの値が増加したと判断する。この場合、CPU11は、メモリの値が増加したと判断したブロックのカウンタを「1」加算する(ステップS39)。
また、CPU11は、今回のメモリの値と、前回のメモリの値とが等しい場合、メモリの値が変化していないと判断する。この場合、CPU11は、メモリの値が変化していないと判断したブロックのカウンタを変更しない(ステップS40)。
またさらに、CPU11は、今回のメモリの値が前回のメモリの値より小さい場合、メモリの値が減少したと判断する。この場合、CPU11は、メモリの値が減少したと判断したブロックのカウンタをリセットする(ステップS41)。
CPU11は、今回のRAM16のメモリの値と、変更後のカウンタの値とを対応付けてメモリステータス格納部173に記憶する(ステップS42)。
CPU11は、全てのブロックに対して上記の解析処理及び記憶処理を行ったか否か判定する(ステップS43)。未処理のブロックが存在する場合(ステップS43、NO)、CPU11は、ステップS36に移行し、次のアドレスのブロックについてステップS36乃至ステップS42の処理を行う。
未処理のブロックが存在しない場合(ステップS43、YES)、CPU11は、各ブロック毎のカウンタの値と、予め設定される閾値とを比較する(ステップS44)。CPU11は、この比較の結果、予め設定される閾値以上のカウンタが存在するか否か判定する(ステップS45)。
予め設定される閾値以上のカウンタが存在しない場合(ステップS45、NO)、CPU11は、ステップS35に移行し、保存時間の経過を待つ状態に遷移する。予め設定される閾値以上のカウンタが存在する場合(ステップS45、YES)、CPU11は、異常の可能性が有ると判断する(ステップS46)。即ち、CPU11は、例えば、カウンタの異常などの為にRAM16の値が増加を続けていると判断する。
CPU11は、上記の解析処理の結果において、異常が発生したと判断したブロックのアドレスに基づいて、シンボルファイル171を参照する。CPU11はシンボルファイル171から異常が発生したと判断したブロックのアドレスを検索し、検索したアドレスに対応付けられているソースコードに関する情報を抽出する。これにより、CPU11は、バグを含む可能性のあるソースコードを特定することができる。
CPU11は、以上を検出したブロック、アドレス、及びソースコードなどを含む警告を、予め設定される警告方式により操作者に報知する(ステップS47)。
上記したように、本実施形態に係る異常検出方法は、異なる時間におけるメモリの値を比較し、各ブロック毎に増加、変化無し、あるいは減少などの値の変化を解析する。メモリの値の変化に応じてカウンタの値を増減し、カウンタの値が予め設定される閾値に達する場合、異常を検出する。
これにより、バグを含む可能性のあるソースコードを特定することができる。特に、メモリの値が単調増加する異常を効率的に検出することができる。また、少なくとも前回のメモリの値とカウンタとを記憶しておくことにより実現可能である為、使用するメモリの容量を抑える事ができる。さらに、リアルタイムで解析を行う為、異常をより迅速に検出することができる。この結果、より高精度に異常を検出することができる異常検出方法、及び異常検出装置を提供することができる。
なお、この発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具現化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合わせてもよい。
1…端末装置、11…CPU、12…入出力部、13…ディスプレイ、14…キーボード、15…ROM、16…RAM、17…記憶部、18…デバッグI/F、19…ソフトウェア、171…シンボルファイル、172…記録用プログラム、173…メモリステータス格納部、174…解析用プログラム。
Claims (14)
- ソフトウェアを実行して処理データをメモリ上に展開するソフトウェア実行部と、
前記メモリのメモリステータスを所定時間毎に記憶する記憶部と、
前記記憶部により記憶したメモリステータスを所定の容量の複数のブロックに分割する分割部と、
前記分割部により分割したブロック毎にメモリステータスの時間変化を解析する解析部と、
前記解析部による解析の結果に基づいて異常を検出する異常検出部と、
を具備することを特徴とする異常検出装置。 - 前記ソフトウェア実行部は、前記ソフトウェアを実行する場合、メモリ上のアドレスとソフトウェアにおけるソースコードを示す情報とを対応付けてシンボルファイルを生成し、
前記異常検出部は、異常を検出したブロックのアドレスに基づいて前記シンボルファイルを参照し、ソースコードを示す情報を抽出する、
ことを特徴とする請求項1に記載の異常検出装置。 - 入力部をさらに具備し、
前記記憶部は、前記入力部により入力される情報に基づいて保存時間を設定し、設定した保存時間毎に前記メモリステータスを記憶することを特徴とする請求項2に記載の異常検出装置。 - 前記解析部は、前記入力部により入力される情報に基づいて観測時間を設定し、前記ソフトウェア実行部によりソフトウェアを実行してから前記設定した観測時間が経過した場合、解析を行うことを特徴とする請求項3に記載の異常検出装置。
- 前記異常検出部は、前記解析部によりメモリステータスの増加が継続していると判断した場合、カウンタにおける異常を検出することを特徴とする請求項4に記載の異常検出装置。
- 前記解析部は、前記入力部により入力される情報に基づいてメモリステータスの上限値を設定し、
前記異常検出部は、前記解析部による解析の結果、メモリステータスの値が前記上限値を超える場合、オーバーフローを検出することを特徴とする請求項5に記載の異常検出装置。 - 前記異常検出部は、前記解析部による解析の結果、メモリステータスの値が所定時間変化しない場合、メモリリークを検出することを特徴とする請求項6に記載の異常検出装置。
- 前記ソフトウェア実行部によりソフトウェアを実行してから前記設定した保存時間が経過した場合、解析を行うことを特徴とする請求項3に記載の異常検出装置。
- 前記解析部は、前記メモリのメモリステータスと、前記記憶部に記憶されているメモリステータスとを各ブロック毎に比較し、前記比較の結果に応じてカウンタの値を増減することを特徴とする請求項8に記載の異常検出装置。
- 前記解析部は、前記入力部により入力される情報に基づいて閾値を設定し、前記カウンタの値が前記設定した閾値に達する場合、異常を検出することを特徴とする請求項9に記載の異常検出装置。
- 前記解析部は、前記メモリのメモリステータスが前記記憶部に記憶されているメモリステータスより大きい場合、前記カウンタの値を増加させることを特徴とする請求項9に記載の異常検出装置。
- 前記解析部は、前記メモリのメモリステータスと前記記憶部に記憶されているメモリステータスとが同じ値である場合、前記カウンタの値を維持することを特徴とする請求項9に記載の異常検出装置。
- 前記解析部は、前記メモリのメモリステータスが前記記憶部に記憶されているメモリステータスより小さい場合、前記カウンタの値をリセットすることを特徴とする請求項9に記載の異常検出装置。
- ソフトウェアを実行して処理データをメモリ上に展開し、
前記メモリのメモリステータスを所定時間毎に記憶し、
前記記憶したメモリステータスを所定の容量の複数のブロックに分割し、
前記分割したブロック毎にメモリステータスの時間変化を解析し、
前記解析の結果に基づいて異常を検出する、
ことを特徴とする異常検出方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009216067A JP2011028711A (ja) | 2009-07-03 | 2009-09-17 | 異常検出方法、及び異常検出装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009158986 | 2009-07-03 | ||
JP2009216067A JP2011028711A (ja) | 2009-07-03 | 2009-09-17 | 異常検出方法、及び異常検出装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011028711A true JP2011028711A (ja) | 2011-02-10 |
Family
ID=43637337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009216067A Withdrawn JP2011028711A (ja) | 2009-07-03 | 2009-09-17 | 異常検出方法、及び異常検出装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011028711A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015090683A (ja) * | 2013-11-07 | 2015-05-11 | 富士通株式会社 | コンピュータプログラム、情報処理方法及び情報処理装置 |
-
2009
- 2009-09-17 JP JP2009216067A patent/JP2011028711A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015090683A (ja) * | 2013-11-07 | 2015-05-11 | 富士通株式会社 | コンピュータプログラム、情報処理方法及び情報処理装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3239839A1 (en) | Operation management device, operation management method, and recording medium in which operation management program is recorded | |
US20070219748A1 (en) | Computer apparatus, start-up controlling method, and storage medium | |
US10359401B2 (en) | Malfunction diagnosing apparatus, malfunction diagnosing method, and recording medium | |
JP6430037B2 (ja) | デバッグ支援装置およびデバッグ支援方法 | |
US12021681B2 (en) | Communication device, surveillance server, and log collection method | |
JP4356634B2 (ja) | 故障診断回路とこの故障診断回路を備えた情報処理装置、故障診断システム及び故障診断プログラム | |
US20100332914A1 (en) | Dump output control apparatus and dump output control method | |
CN114996103A (zh) | 页面异常检测方法、装置、电子设备和存储介质 | |
US10318731B2 (en) | Detection system and detection method | |
TW201706739A (zh) | 可程式邏輯控制器、工程工具及工程工具程式 | |
JP6880961B2 (ja) | 情報処理装置、およびログ記録方法 | |
US20150278656A1 (en) | Job discrimination method and device | |
JP5056396B2 (ja) | ソフトウェア動作監視装置、プログラム | |
JP6375200B2 (ja) | 計算機システムの異常予兆検出装置および方法 | |
JP2011028711A (ja) | 異常検出方法、及び異常検出装置 | |
US8291389B2 (en) | Automatically detecting non-modifying transforms when profiling source code | |
JP2009223714A (ja) | 演算回路及び演算回路の異常解析方法 | |
CN105760264A (zh) | 一种检测服务器故障硬件设备的方法及装置 | |
JP6747161B2 (ja) | ソフトウェア品質判定方法 | |
JP2020154896A (ja) | 故障予兆検知システム及び故障予兆検知方法 | |
JP2008176703A (ja) | 故障診断システム及び故障診断プログラム | |
CN113742176A (zh) | 一种故障预测方法、装置和电子设备 | |
JP2012108848A (ja) | 動作ログ収集システム及びプログラム | |
JP4627275B2 (ja) | 監視プログラム、監視方法、および、監視装置 | |
CN113986142B (zh) | 磁盘故障监控方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20121204 |