(57)【要約】      （修正有）【課題】ワイヤレスデバイスのリアルタイム性に適用するメモリリーク検出手法の提供。【解決手段】診断エンジンを常駐させてシステムの正常時に待ち状態に置き、診断エンジンがシステムリソース例えばＣＰＵとメモリを使用しないようにし、予めアプリケーションにダイナミックに必要とするメモリの状況を学習してシステムに覚えさせ、システムにイベントがあったときに寝かせている診断エンジンの一部を起こして発生したメモリ割付や開放イベント、メモリの利用状態、プロセスの動作状態等の情報を記録してシステムの健康状態を監視し、システムにメモリリーク又は潜在的なメモリリークの不具合が起きたときに診断エンジンを部分的に起こして、これまで正常時に収集した診断データおよび学習した情報を用いて、発生したメモリリークの不具合を診断して、診断結果を診断レポートにまとめて診断サーバに送り、診断データベースに登録する。【選択図】図１
2007141193.tif 000002
【特許請求の範囲】
【請求項１】
少なくともひとつのプロセッサとメモリを搭載し、中に少なくともひとつのリアルタイム・オペレーティングシステムとひとつのソフトウェア・アプリケーションをもち、リアルタイムの環境においてワイヤレスデバイスを診断するエンジンと、診断結果を通知するためにワイヤレスネットワークを通してワイヤレスデバイスと接続できる遠隔地に置かれる診断データベース又はケーブルやメモリカードによってワイヤレスデバイスと接続して診断結果をダンプすることができるローカルに置かれる診断データベースから構成するワイヤレスデバイス診断システム。
【請求項２】
請求項１に記載するワイヤレスデバイス上で起きるメモリリーク（割り付けられたメモリの開放漏れ）をワイヤレスデバイスのリアルタイム性に影響せずに検出するメソッド。本メソッドは、診断エンジンをワイヤレスデバイス上でメモリリークのない時に寝た振り（スリープ）の状態にさせ、システムにメモリ操作（例えば割付又は開放など）のある時又はメモリリークが発生した時にスリープしている診断エンジンを喚起して直ちにメモリリークを検出し、発生したメモリリークを診断する。
【請求項３】
請求項１に記載するワイヤレスデバイス上でリアルタイムの環境においてメモリの操作とメモリの使用状態を監視するメソッド。本メソッドは、本来のメモリ操作（例えば割付や開放）を従来の通りにさせ、メモリリークの検出に必要な情報（例えば割り付けられたメモリのアドレスとサイズ）を記録し、記録した情報に基づいて割り付けられたメモリの使用状態と割り付けられたメモリのヒープ領域の状態を監視し、メモリへ不正なアクセス（例えばワイルドポインタ開放、ヌルポインタ開放、メモリの重複開放等）をしようとするメモリ操作があった時に不正なメモリアクセスをさせず、不正なメモリアクセスとして警告しシステムのクラッシュを回避する。
【請求項４】
請求項１に記載するワイヤレスデバイス上でリアルタイムの環境においてメモリリークを検出するメソッド。本メソッドは、ワイヤレスデバイス上でプロセスが終了時に割り付けられたメモリを開放しないメモリリーク又はメモリ割付を必要とする変数のスコープ（メモリの使用範囲）を特定してそのスコープ内に割り付けられたメモリを開放しないメモリリークを検出する。
【請求項５】
請求項１に記載するワイヤレスデバイス上でリアルタイムの環境において潜在的なメモリリークを検出するメソッド。本メソッドは、ワイヤレスデバイス上でメモリ割付のヒープ境界（最大のヒープ使用サイズ）を予めに学習しておき、１００％で断定できない潜在的なメモリリークを検出する。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、ワイヤレスデバイス上でリアルタイム環境においてシステムに起きるメモリリークを検出する方法と、システムの正常時に寝かせてメモリ操作があった時又はメモリリークが発生した時に喚起させる診断エンジンと、診断エンジンを用いてメモリリークの検出と診断を行う機能を持つワイヤレスデバイスおよびワイヤレスデバイスの診断と復旧を実施するシステムに関するものである。
【背景技術】
【０００２】  近年、携帯電話上でさまざまなリアルタイム性の強いアプリケーションを実装して、数多くのアプリケーションが高負荷の状態で動作し、メモリリークが多く発生すれば、メモリが足りなくなり、既に起動して走っているプロセスが異常となったり、新たに起動しようとするプロセスが起動できなくなる。しかし、メモリの利用状態を監視する時又はシステムに発生したメモリリークを検出する時に、ＣＰＵやメモリなどのシステムリソースを多く利用せず、システムのリアルタイム性に影響しない有効なメモリリークを検出する手法がない。【０００３】  ワイヤレスデバイス上で発生するメモリリークを検出するために利用する従来のデバッグ手法例えば開発段階で利用しているデバッグツールＭＥＭＷＡＴＣＨ等は、多くのメモリを使ったり、平均的に５倍以上遅くなったり、リアルタイムの環境に利用することが不可能である。しかし、いま開発期間が大幅に短縮されているために、開発段階で十分なテストができず、また数百万台を出荷して様々な利用者の環境において様々な操作や利用状況によって開発段階と異なるメモリリークが発生するので、リアルタイム環境に適用できるメモリリーク検出手法が必要とされている。【０００４】  ワイヤレスデバイス上で複雑な実行環境において発生したメモリリークは容易に判断できるものではない。割り付けられたメモリが開放すべき時までに開放しなければ、漏れたこと（リーク）と判断される。しかし、いつどこで開放すべきであるのがに対してシステムリソースを多く使用せずにリアルタイム性に影響しないように判断することが困難である。また、メモリリークはアプリケーションの中で連続的なメモリ割付と区別して正しく判断するべきである。メモリリークと連続的なメモリ割付を区別することも容易ではない。【０００５】  また、アプリケーションにおいて漏れたメモリの量だけを報告して、メモリが漏れた場所を特定できなければ、発生したメモリリークおよびメモリリークによる他の不具合を診断するための役に立たない。従って、メモリリークが発生した場所と原因を特定する必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】  上述のように、現状では、ワイヤレスデバイス上でシステムのリアルタイム性に影響しないメモリ使用状態の監視手法と、メモリリークの診断手法がないために、メモリリークおよびメモリリークによって起こされた不具合の発生場所と原因を特定することが困難であり、同じ不具合が繰り返して多くの携帯電話上で発生し、携帯電話事業者と携帯電話メーカは発生した不具合に対して迅速な対応ができないので携帯電話利用者に十分に満足できるサービスを提供することができない。【０００７】  そこで、本発明は、ワイヤレスデバイス上でシステムのリアルタイム性に影響させないためにシステムの正常時にメモリリークの診断エンジンを寝かせる手法と、システムにメモリ操作又はメモリに関する不具合が発生する時に寝ている診断エンジンを喚起する手法と、メモリリークの不具合を診断するために必要となる各種の診断データを収集する手法と、収集した診断データを用いてメモリリークおよびメモリリーク関連の不具合を診断する手法、これらの手法を実現したワイヤレスデバイスを提供することを目的とする。
【課題を解決するための手段】
【０００８】  本発明によるワイヤレスデバイスは、リアルタイム環境においてシステム上で発生するメモリリークおよびメモリリークによって起こされる不具合の診断エンジンを備えた携帯電話機であって、システムの正常時にシステムのメモリ状態を監視することができる診断エンジンを寝かせる手段と、システムにメモリ関連の異常又は不具合が発生した時に寝かせている診断エンジンを喚起する手段と、起こした診断エンジンによってメモリリークおよびメモリリークに関連するシステムの不具合を診断するために必要なデータを収集する手段と、収集したデータを分類・解析して必要な診断データを提供する手段を有することを特徴とする。【０００９】  システムの正常時にシステム上のメモリ状態を監視することができる診断エンジンを寝かせる手段は、診断エンジンをシステム部とユーザ部の二つに分けて、システム部をオペレーティングシステムが走るカーネルスペースに常駐させ、ユーザ部をアプリケーションが走るユーザスペースに常駐させる。診断エンジンのシステム部は、プロセスの状態とプロセスのメモリ使用状態を監視し、診断エンジンのユーザ部は、メモリ割付や開放に関するデータを収集し、収集したデータを用いてメモリリーク又は潜在的なメモリリークの発生があったかどうかを検出する。診断エンジンのシステム部とユーザ部は、ワイヤレスデバイス上でシステムに常に動作することではなく、システムのリソース例えばＣＰＵを利用しない待ち状態（スリープ）にある。診断エンジンのシステム部は、イベント例えばプロセスの起動や終了が発生した時に喚起し、メモリの利用状態に関わる情報例えばプロセスに割り付けられたメモリの状態を収集し、開放されないメモリの状態を分析し、システムのメモリ状態を監視する。【００１０】  システム上でメモリ関連の異常又は不具合が発生した時に寝かせている診断エンジンを喚起する手段は、システムコールによってアプリケーションをプロセスとして起動させる時又は走っているプロセスを終了させる時に寝かせている診断エンジンのシステム部を喚起させ、カーネルスペース上の作業を済ませた後に、診断エンジンのシステム部からシステムコール又はソケットによってシグナルを待ち状態にある診断エンジンのユーザ部に送り、寝かせている診断エンジンのユーザ部を喚起させる。【００１１】  起こした診断エンジンによってメモリリークの不具合を診断するために必要なデータを収集する手段は、起こされた診断エンジンのシステム部によってプロセスの動作状態、利用しているメモリ容量、プロセスに割り付けられたメモリ状態を記録してワイヤレスデバイス上のシステムに保存し、また、ワイヤレスデバイス上でシステムに発生するすべてのイベントと発生したイベントに対応する動作や状態と、プロセスの状態例えば起動や終了と、システムリソースの利用状態も記録する。【００１２】  収集したデータを分類・解析して必要な診断データを提供する手段は、診断エンジンのシステム部より起こされた診断エンジンのユーザ部が診断エンジンのシステム部によって収集したメモリリーク関連のデータ例えばプロセスのメモリ使用量、プロセスに割り付けられたメモリの利用状態、システムリソース、イベント情報、プ��セス情報と一緒に分類・解析し、発生したメモリ関連の不具合を診断するに必要な診断データを診断レポートに添付して提供する。
【発明の効果】
【００１３】  以上のように、本発明によれば、ワイヤレスデバイス上でリアルタイムシステムにおいてメモリリーク関連不具合の診断、不具合発生の回避を実施するためのシステムとして、ワイヤレスデバイスに診断エンジンを常駐させ、システムの正常時に診断エンジンを寝かせて待ち状態に置くためにシステムのリアルタイム性にまったく影響せず、システムにプロセスの起動・終了時に診断エンジンの一部を喚起し、メモリリークの検出を行い、メモリリーク関連不具合の診断に必要な診断データを収集して、収集したデータの分類・解析を行って管理し、メモリリークの不具合が発生する場合に不具合を診断するときに必要な診断データを提供することができ、システムにメモリリークが発生した時に収集したデータを用いてリアルタイムで発生したメモリリークを診断してメモリリークが発生したプロセスを終了させることによって漏れたメモリを開放することができるので、ほとんどの場合に事業者のカスタマサポートに連絡する必要がなく、修理受付窓口に持ち込まれる必要もない。たとえ、事業者のカスタマサポートに連絡されたときでも、サポートに必要な診断情報が既に分かりやすく解析して診断サーバに報告されており、すぐにカスタマへ対応ができる。また、ソフトウェア上でメモリリークのバグが見つかった場合に、バグに関する詳細なリアルタイムシステムの診断情報が収集され分類されて分かりやすい形に解析されており、メーカが即座に的確にバグを判断することができ、バグを直ちに直すことができる。事業者とメーカにとって、カスタマとプロダクトのサポートコストを著しく削減することができる。
【発明を実施するための最良の形態】
【００１４】  以下、本発明の実施の形態を図面を参照して説明する。図１は、本発明によるワイヤレスデバイスのリアルタイム性に適用する診断手法を実現することができるシステムの構成を示すブロック図である。【００１５】  図１に示す診断システムにおいて、ワイヤレスデバイス０１に診断エンジン−１（診断エンジンのユーザ部）０２、診断エンジン−２（診断エンジンのシステム部）０３を実装して、プロセスの動作状態、プロセスのメモリ利用状況と発生するイベントを観察し、診断データ０４を収集し、発生した不具合に対して収集した診断データを利用して診断を行い、診断の結果を診断サーバ０５と診断データベース０６に対してワイヤレスネットワーク０７経由で報告する。【００１６】  図２は、ワイヤレスデバイスのリアルタイム環境においてメモリリーク診断の実施を示すブロック図である。診断エンジン−１と診断エンジン−２はシステムが正常時に待ち状態にあり、プロセスの起動・終了のイベントがあるときに診断エンジン−２（診断エンジンのシステム部）０３が起きてプロセスの状態とプロセスのメモリ利用状態をチェックして監視し、メモリの割付や開放が発生したときにアプリケーション１０からシステムコールを呼んで診断エンジン−２（診断エンジンのシステム部）０３を起こして、割付られたメモリの情報を記録し、割り付けられたメモリを開放する時に記録しているメモリ情報を更新して、シグナルを診断エンジン−１（診断エンジンのユーザ部）０２に送り、診断エンジンのユーザ部を起こして記録したメモリ情報を分類・解析し、メモリリークを検出して発生したメモリリークの不具合を診断する。
【実施例】
【００１７】  図３は、ワイヤレスデバイス上でリアルタイム環境におけるメモリリーク診断を実施する手順の一例を示す説明図である。図３に示している例では、アプリケーション（ワイヤレスデバイス上で走るアプリケーション）の中でメモリ割付２０があった時に割り付けられたメモリに関する情報記録２１（例えば割り付けられたメモリのアドレス、メモリのサイズ）を行って、メモリ開放２２があった時に記録情報更新２３を行い、リーク検出２４をして、メモリリークを検出した場合に、リーク報告２５を行う。システムのメモリ利用状態監視にあたる情報記録２１を行う際には、メモリ割付ごとに割り付けられたメモリに関する情報に割り付けられたメモリのアドレス、メモリのサイズ、メモリを要求した関数のアドレス、メモリを割り付けた変数のアドレスが含まれ、これらの情報データを一つのノードとしてリンクリストに登録し、検索を迅速に行えるためにハッシュテーブルを使う。割り付けられたメモリを使用した後にメモリ開放２２があった時に開放するメモリにあたるノードをリンクリストから削除して記録情報更新２３を行って、未開放のメモリ情報のみがこのリンクリストに残る。リンクリスト上に残った記録情報に基づいてリーク検出２４を行う。割り付けられたメモリが開放すべき時に開放されなかったら、メモリが漏れたこととし、メモリリークを検出する。メモリリークが検出されたら、リーク報告２５を行う。メモリリークに関する報告には、上記の漏れたメモリに関する記録情報のほかにメモリリークが発生したところまで発生したイベントログ、呼び出された関数のログ、プロセスの動作状態、システムリソースの利用状態等の情報が含まれる。これらの情報はメモリリークを診断する際に必要であり、発生したメモリリークの診断に利用できる。【００１８】  メモリ割付の要求があった時に、アプリケーションからメモリ割付関数を呼び出す。割り付けられたメモリに関する情報記録２１を行うために、呼び出されたメモリ割付関数（例えばｍａｌｌｏｃ）が入っている従来のライブラリを置き換える。置き換えたライブラリには、メモリ割付のほかにメモリ開放等のメモリ操作に関する関数が含まれる。こられの関数では、メモリ割付や開放等の従来のメモリ操作が従来の通りに従来のメモリ操作関数を用いて行われ、それらの従来のメモリ操作が終った後に診断に必要な情報記録２１を行う。例えば、メモリ割付があった時に置き換えた関数の中でまず従来の通りに必要なメモリを割り付けて、割り付けたメモリの情報をリンクリストに記録し、メモリ開放があった時にまずポインタのアドレスでリンクリスト上でそのノードを検索し、該当するノードがあれば、従来の通りにメモリ開放を行い、その後に該当するノードをリンクリストから削除する。該当するノードがなければ、不法メモリ開放としてメモリ開放を要求したアプリケーションに警告する。【００１９】  リーク検出２４は、上記のリンクリストに残ったノードにある情報に基づいてプロセスが終了する時又は割付られたメモリを開放するべきの判断が分かった時に行われる。プロセスが終了する時にリンクリストに残ったノードがあれば、それらがメモリリークとなる。プロセスが終了せずに、明確にメモリリークが判断するにメモリを割り付けた変数のスコープを知る必要がある。ある関数の中で定義されたローカル変数であれば、その変数のスコープがその関数が終了するまでとなり、その関数が終了した際に開放しなかったら、そのメモリが漏れたこととなり、メモリリークが明確に判断できる。【００２０】  メモリを割り付けた変数のスコープが特定できない時又はグローバル変数である時に、プロセスが終了するまでにメモリリークが明確に判断できない。この場合には、潜在的なメモリリークとして警告することができる。図４はワイヤレスデバイス上で潜在的なメモリリークの診断を実装する一例を示す説明図である。潜在的なメモリリークを判断するために、アプリケーションの中でダイナミックに割り付けられるメモリの状況を把握して学習３０を行う。学習３０の中でアプリケーションに潜在的なメモリリーク判断に必要な情報として例えば最大のメモリサイズ等を学習データ３１として覚えさせる。この学習３０は、開発段階又は出荷テストの段階で行う。デバイスが出荷された後にも学習することができる。学習データ３１はフラッシュ上で保存する。リアルタイムの環境でアプリケーションが走る際に、メモリ割付２０があった時にメモリリークの検出と同じように情報記録２１を行い、潜在的リーク診断３２の時に保存している学習データ３１を用いて、メモリリークが潜在的に発生したかどうかを判断する。発生したことを判断する時に潜在リーク警告３３を行う。【００２１】  メモリリーク検出又は潜在的なメモリリーク警告は、システム全体のパフォーマンスを高めるためにシステムの中にすべてのプロセスに対して行う必要はなく、プロセスごとに指定することができる。また、この指定は、システムが動作している時にダイナミックに変えることもできる。
【図面の簡単な説明】
【００２２】
【図１】本発明によるワイヤレスデバイスのリアルタイム性に適用するメモリリーク診断手法を実現することができる診断システムの構成を示すブロック図である。
【図２】ワイヤレスデバイスのリアルタイム環境におけるメモリリーク診断を実施する一例を示すブロック図である。
【図３】ワイヤレスデバイス上でリアルタイム環境におけるメモリリーク診断を実施する手順の一例を示す説明図である。
【図４】ワイヤレスデバイス上で潜在的なメモリリークの診断を実装する一例を示す説明図である。
【符号の説明】
【００２３】０１  ワイヤレスデバイス（携帯電話、携帯端末）
０２  診断エンジン−１
０３  診断エンジン−２
０４  診断データ
０５  診断サーバ
０６  診断データベース
０７  ワイヤレスネットワーク
１０  アプリケーション
２０  メモリ割付
２１  情報記録
２２  メモリ開放
２３  記録情報更新
２４  メモリリーク検出
２５  メモリリーク報告
３０  メモリ情報学習
３１  学習データ
３２  潜在的メモリリーク診断
３３  潜在的メモリリーク警告
【図１】
2007141193.tif 000003
【図２】
2007141193.tif 000004
【図３】
2007141193.tif 000005
【図４】
2007141193.tif 000006