【手続補正書】
【提出日】令和2年3月30日(2020.3.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータにより実現される方法であって、
コンピュータが、スタックフレームのシーケンスを含むスタックトレースを受信するステップと、
前記スタックフレームのシーケンスの少なくとも一部に基づいて、前記スタックフレームのシーケンスを表すトレースシグネチャを生成するステップと、
前記コンピュータが、１つ以上の後続スタックトレースを受信するステップと、
前記１つ以上の後続スタックトレースの各々について、
後続スタックトレースが含む後続のスタックフレームのシーケンスを表すための後続トレースシグネチャが生成されているかどうかを判断するステップと、
前記後続トレースシグネチャが生成されていない場合、前記トレースシグネチャおよび前記トレースシグネチャの少なくとも一部に基づいて生成された他の後続トレースシグネチャの少なくとも一部に基づいて、前記後続のスタックフレームのシーケンスを表すための前記後続トレースシグネチャを生成するステップとを含む、方法。
【請求項２】
前記スタックトレースは第１スタックトレースであり、前記スタックフレームのシーケンスは、第１のスタックフレームのシーケンスであり、前記トレースシグネチャは第１トレースシグネチャであり、
前記１つ以上の後続スタックトレースは、第２のスタックフレームのシーケンスを含む第２スタックトレースを含み、
前記第２のスタックフレームのシーケンスを表す第２トレースシグネチャが生成され、
前記第２トレースシグネチャを生成するステップは、
前記第１のスタックフレームのシーケンスおよび前記第２のスタックフレームのシーケンスが、一致するスタックフレームのサブシーケンスを共有すると判断し、かつ、第１のスタックフレームのシーケンスに含まれる一致しないスタックフレームのサブシーケンスが前記第２のスタックフレームのシーケンスに含まれる一致しないスタックフレームのサブシーケンスとは異なると判断するステップと、
前記一致するスタックフレームのサブシーケンスを表す第１のセグメントシグネチャを生成するステップと、
前記第２のスタックフレームのシーケンスに含まれる前記一致しないスタックフレームのサブシーケンスを表す第２のセグメントシグネチャを生成するステップと、
前記第１のセグメントシグネチャおよび第２のセグメントシグネチャを含む前記第２トレースシグネチャを生成するステップとを含む、請求項１に記載の方法。
【請求項３】
前記第２トレースシグネチャを生成するステップは、
前記第１のスタックフレームのシーケンスに含まれる前記一致しないスタックフレームのサブシーケンスを分類する第３のセグメントシグネチャを生成するステップと、
前記第１トレースシグネチャを、前記第１のセグメントシグネチャおよび前記第３のセグメントシグネチャを含むように変更するステップとをさらに含む、請求項２に記載の方法。
【請求項４】
前記第１トレースシグネチャは、前記第１のスタックフレームのシーケンスを含むスタックトレースが受信されたときにインクリメントされる第１カウンタに関連付けられ、前記第２トレースシグネチャは、前記第２のスタックフレームのシーケンスを含むスタックトレースが受信されたときにインクリメントされる第２カウンタに関連付けられる、請求項２または３に記載の方法。
【請求項５】
前記第１のセグメントシグネチャは、前記一致するスタックフレームのサブシーケンスを含むスタックトレースが受信されたときにインクリメントされる第３カウンタに関連付けられ、
前記第２のセグメントシグネチャは、前記第２のスタックフレームのシーケンスに含まれる前記一致しないスタックフレームのサブシーケンスを含むスタックトレースが受信されたときにインクリメントされる第４カウンタに関連付けられ、
前記第３カウンタは、前記第１のセグメントシグネチャが生成されたときに前記第１カウンタからコピーされ、
前記第４カウンタは、前記第２のセグメントシグネチャが生成されたときに前記第２カウンタからコピーされる、請求項４に記載の方法。
【請求項６】
前記トレースシグネチャは組に対応し、前記組は、根ノードとしてノードを含む二分木を含み、前記ノードは、前記スタックフレームのシーケンスを表す、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記後続スタックトレースが含む前記後続のスタックフレームのシーケンスを各々が含む前記後続スタックトレースのセットを表すための前記後続トレースシグネチャが生成されているかどうかを判断するステップは、前記ノードを含む、前に生成された１つ以上のノードが前記後続のスタックフレームのシーケンスを表すかどうかを判断するステップを含み、
前記後続のスタックフレームのシーケンスを表すための前記後続トレースシグネチャを生成するステップは、
前記前に生成された１つ以上のノードによって表されない前記後続のスタックフレームのシーケンスに含まれる１つ以上のスタックフレームのサブシーケンスを決定するステップと、
前記後続のスタックフレームのシーケンスに含まれる前記１つ以上のスタックフレームのサブシーケンスを表すための１つ以上の追加ノードを生成するステップと、
前に生成された１つ以上の組に含まれる、前に生成された１つ以上の二分木に、前記１つ以上の追加ノードのうちの少なくとも１つを合体させるステップとを含み、前記前に生成された１つ以上の二分木は前記二分木を含み、前記前に生成された１つ以上の組は前記組を含み、前記後続トレースシグネチャを生成するステップは、さらに、
１つ以上の追加の二分木を生成するステップを含み、前記１つ以上の二分木のうちの少なくとも１つは、前記１つ以上の追加ノードのうちの少なくとも１つを含み、前記後続トレースシグネチャを生成するステップは、さらに、
前記１つ以上の追加の二分木を含む追加の組を生成するステップを含み、前記後続トレースシグネチャは、前記追加の組に対応する、請求項６に記載の方法。
【請求項８】
各組、各ノード、および各スタックフレームは、整数によって一意に識別される、請求項７に記載の方法。
【請求項９】
前記スタックトレースは第１スタックトレースであり、前記スタックフレームのシーケンスは、第１のスタックフレームのシーケンスであり、前記トレースシグネチャは第１トレースシグネチャであり、前記組は第１の組であり、前記二分木は第１の二分木であり、前記ノードは第１ノードであり、
前記１つ以上の後続スタックトレースは、第２のスタックフレームのシーケンスを含む第２スタックトレースを含み、
前記第２のスタックフレームのシーケンスを表す第２トレースシグネチャが生成され、
前記第２トレースシグネチャを生成するステップは、
前記第１のスタックフレームのシーケンスおよび前記第２のスタックフレームのシーケンスが、一致するスタックフレームのサブシーケンスを共有すると判断し、かつ、第１のスタックフレームのシーケンスに含まれる一致しないスタックフレームのサブシーケンスが前記第２のスタックフレームのシーケンスに含まれる一致しないスタックフレームのサブシーケンスとは異なると判断するステップと、
前記一致するスタックフレームのサブシーケンスを表す第２ノードを生成するステップと、
前記第２のスタックフレームのシーケンスに含まれる前記一致しないスタックフレームのサブシーケンスを表す第３ノードを生成するステップと、
前記第２ノードを含む第２の二分木と、前記第３ノードを含む第３の二分木とを生成するステップと、
前記第２の二分木および前記第３の二分木を含む第２の組を生成するステップとを含み、前記第２ノードおよび第３ノードは兄弟であり、前記第２トレースシグネチャは前記第２の組に対応する、請求項６に記載の方法。
【請求項１０】
前記第２トレースシグネチャを生成するステップは、
前記一致するスタックフレームのサブシーケンスを表す第４ノードを生成するステップと、
前記第１のスタックフレームのシーケンスに含まれる前記一致しないスタックフレームのサブシーケンスを表す第５ノードを生成するステップと、
前記第１ノードの子として前記第４ノードおよび前記第５ノードを前記第１の二分木に加えるステップとをさらに含む、請求項９に記載の方法。
【請求項１１】
１つ以上のプロセッサと、
前記１つ以上のプロセッサにアクセス可能なメモリとを備え、前記メモリは、１つ以上の命令を格納し、前記１つ以上の命令は、前記１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに、
スタックフレームのシーケンスを含むスタックトレースを受信させ、
前記スタックフレームのシーケンスの少なくとも一部に基づいて、前記スタックフレームのシーケンスを表すトレースシグネチャを生成させ、
１つ以上の後続スタックトレースを受信させ、
前記１つ以上の後続スタックトレースの各々について、
後続スタックトレースが含む後続のスタックフレームのシーケンスを表すための後続トレースシグネチャが生成されているかどうかを判断させ、
前記後続トレースシグネチャが生成されていない場合、前記トレースシグネチャおよび前記トレースシグネチャに基づいて生成された他の後続トレースシグネチャの少なくとも一部に基づいて、前記後続のスタックフレームのシーケンスを表すための前記後続トレースシグネチャを生成させる、システム。
【請求項１２】
１つ以上の命令を格納するコンピュータ読み取り可能なプログラムであって、前記１つ以上の命令は、１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに、
スタックフレームのシーケンスを含むスタックトレースを受信させ、
前記スタックフレームのシーケンスの少なくとも一部に基づいて、前記スタックフレームのシーケンスを表すトレースシグネチャを生成させ、
１つ以上の後続スタックトレースを受信させ、
前記１つ以上の後続スタックトレースの各々について、
後続スタックトレースが含む後続のスタックフレームのシーケンスを表すための後続トレースシグネチャが生成されているかどうかを判断させ、
前記後続トレースシグネチャが生成されていない場合、前記トレースシグネチャおよび前記トレースシグネチャに基づいて生成された他の後続トレースシグネチャの少なくとも一部に基づいて、前記後続のスタックフレームのシーケンスを表すための前記後続トレースシグネチャを生成させる、コンピュータ読み取り可能なプログラム。
【請求項１３】
前記スタックトレースおよび前記１つ以上の後続スタックトレースの各々は、マルチスレッドプログラムに代わって動作している実行中のスレッドに対応し、
前記スタックトレースおよび前記１つ以上の後続スタックトレースは、前記マルチスレッドプログラムの１つ以上のスレッドダンプに応答して受信され、前記１つ以上のスレッドダンプは、前記マルチスレッドプログラムが実行中に異なる時点で実行される、請求項１２に記載のコンピュータ読み取り可能なプログラム。
【請求項１４】
前記スタックトレースおよび前記１つ以上の後続スタックトレースの各々は、マルチスレッドプログラムに代わって動作している実行中のスレッドに対応し、
前記マルチスレッドプログラムの１つ以上のスレッドダンプから複数のスタックトレースが取得され、前記１つ以上のスレッドダンプは、前記マルチスレッドプログラムが実行中に異なる時点で実行され、
前記複数のスタックトレースの重複が排除されて前記スタックトレースおよび前記１つ以上の後続スタックトレースが取得され、前記スタックトレースおよび前記１つ以上の後続スタックトレースは、各々、異なるスタックフレームのシーケンスを含み、
前記スタックトレースおよび前記１つ以上の後続スタックトレースの各々の発生確率が決定され、
前記スタックトレースおよび前記１つ以上の後続スタックトレースは、発生確率の順に受信される、請求項１２に記載のコンピュータ読み取り可能なプログラム。
【請求項１５】
コンピュータは第１コンピュータであり、前記１つ以上の命令は、さらに、前記１つ以上のプロセッサに、前記シグネチャを第２コンピュータに送信させ、前記シグネチャが前記シグネチャを用いて前記スタックトレースを再び作成することができるようになる、請求項１２〜１４のいずれか１項に記載のコンピュータ読み取り可能なプログラム。
【請求項１６】
各スタックフレームは、スタックフレームに対応する呼び出されるメソッドのメソッド名と、呼び出された前記メソッドを定義するコードを含むソースファイル名とを含む、請求項１２〜１５のいずれか１項に記載のコンピュータ読み取り可能なプログラム。
【請求項１７】
前記スタックトレースまたは前記１つ以上の後続スタックトレースが含む１つ以上のスタックフレームが含む１つ以上のメソッド名または１つ以上のソースファイル名にハフマン符号のセットが適用されて、前記１つ以上のスタックフレームが圧縮される、請求項１６に記載のコンピュータ読み取り可能なプログラム。