【问题标题】:Java solutions to record / replay executed code in a JVM在 JVM 中记录/重放执行代码的 Java 解决方案
【发布时间】:2011-07-14 13:57:30
【问题描述】:

我们正试图找出一个非确定性发生的错误(好吧,它是确定性的,但我们只是不知道究竟是什么原因造成的),而且每隔几个小时才会发生一次。

我们读取了很多网络数据,并且我们有很多线程,因此它可能来自输入、竞争条件或两者的组合,但在大多数情况下,无法重现。

我想知道是否有任何 JVM 记录器/回放器可以存储在 JVM 中发生的所有事情,这样我们就可以逐步完成它并重新创建异常的步骤。

我找到了一个。 (我不会发布它,所以人们不会认为我在为产品做广告。),但我想知道是否还有其他人,更重要的是,其他人已经使用过并且可以报告工作得很好。

编辑添加:

我找到了Replay Solutions。没用过,也没听说过,不知道到底有多好。

我们使用 JProfiler,但我认为它实际上并不支持记录/重放所有内容。

【问题讨论】:

  • 继续发布链接。如果它不是您公司的解决方案总是可以的,即使它是您公司的解决方案,如果您像您一样添加免责声明也可以。

标签: java jvm recorder


【解决方案1】:

我建议使用Chronon,它对我来说效果很好,但我还没有广泛使用它。

【讨论】:

  • 啊……这是我几个月前看到的评论。他们真的需要更新他们的 SEO。我一辈子都找不到它。
  • 你知道它是否支持多线程吗?它会保证每条指令(即使在不同的线程上)都会按照最初的顺序执行吗?
  • 我不知道,我建议您与他们联系并讨论您的问题,并保证您会在博客上讨论它。他们仍在努力提高知名度;)
  • 引用自他们的网站@Reverend Gonzo 所以我猜是的:这是否意味着不可重现的错误的终结?是的!您不再需要“重现”错误,因为记录已经捕获了所有执行,因此也捕获了错误。您可以在调试器中播放录音并解决错误。这对于难以重现的错误(如竞争条件、死锁等)特别有用。
  • 作为 Chronon 的作者,我可以确认 Chronon 确实支持多线程 :)
【解决方案2】:

不可能记录所有内容(微基准测试除外),尤其是因为线程交错:性能下降/减速太严重了。如果您尝试重现的问题是并发错误,您可能需要尝试执行部分日志记录并使用 SMT 求解完成交错​​的系统:

http://www.gsd.inesc-id.pt/~nmachado/software/Symbiosis_Tutorial.html

据我所知,这是最新的系统,并且是开源的(java、c 和 c++)。

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多