私はJavaプロセスを1週間以上実行しています。このプロセスでは、いくつかのデータを処理していて、の中間結果をハッシュマップのメモリに保存しています。Javaプロセスのメモリからハッシュマップをダンプする
コードのいくつかのバグのために、プロセスを停止する必要があります。しかし、私はプロセスを殺すと、ハッシュマップでデータが失われます。次回にコードを実行するときに、再処理する必要があります。
私は、メモリ内のハッシュマップ現在のダンプを取ることが可能な方法は、彼らのですか?
私はJavaプロセスを1週間以上実行しています。このプロセスでは、いくつかのデータを処理していて、の中間結果をハッシュマップのメモリに保存しています。Javaプロセスのメモリからハッシュマップをダンプする
コードのいくつかのバグのために、プロセスを停止する必要があります。しかし、私はプロセスを殺すと、ハッシュマップでデータが失われます。次回にコードを実行するときに、再処理する必要があります。
私は、メモリ内のハッシュマップ現在のダンプを取ることが可能な方法は、彼らのですか?
プロファイラなどのさまざまなツールで読み取ることができるメモリダンプをトリガできます。これは読むのが非常に難しく、これを使ってプログラムを再起動する方法について聞いたことはありません。
プログラムを再起動することは、後から考えられることではありません。アプリケーションに設計して徹底的にテストする必要があります。人々がこの問題について心配することを回避する1つの方法は、データベースを使用することです。これは、データベースが専門的に設計され、テストされ、データを失うことなく再起動されるためです。
スタンダードJDKに含まれているJConsole
、またはすでに実行中のプロセスにアタッチしてヒープダンプをトリガーするには、visualvmを使用できます。
しかし、Peterが言ったように、実際にこのダンプを読むことは、あなたを支援するツールが見つからない限り楽しくはありません。
実用的な途中では、何らかの形でデバッガをプロセスに接続するだけです。これが可能かどうかは、JVMとそれを起動するためのオプションによって異なります。 –