-Xdebug标志开销有多大?

我想知道-Xdebug标志引入的性能开销有多大?

调试生产应用程序非常方便,但我想一直停止运行会很昂贵吗?

另外,是否有一种很好的方法可以使已经运行的应用程序通过Debug端口进行监听,而无需重新启动它?

谢谢。

我们没有发现任何差异。 我们使用-Xdebug运行所有生产应用程序。

是否有一种很好的方法可以将Debug模式添加到已经运行的应用程序,而无需重新启动它

这是-Xdebug的作用。 当有人连接到调试端口时,调试器实际启动。

在Java 6下我会说成本约为15%,在Java 5.0下它约为40%。 这可能对你没问题。

另一种了解生产过程的方法是使用JMX / JConsole。 这需要一些工作并且具有相对小的头部。 我想2%。

取决于您的代码正在做什么。 如果你有一个基于网络的,数据库驱动的应用程序,差异可能是可以忽略的,因为瓶颈可能不是JVM执行指令的速度有多快。 如果您的所有代码都在内存中执行科学计算,那么您可以期待一个非平凡的命中。

编辑

当我写这篇文章时,我认为调试器本身已被附加。 使用-Xdebug简单地运行它本身不会影响性能,因为@stepancheg已经注意到了。 然而,我的主要动机不是提供技术分析,而是说即使你导致字节码需要更长的时间来执行它,在典型的Java应用程序中也许并不重要,因为处理器不会很重足够的利用率是决定性能因素。 大多数具有较长生命周期的应用程序都是服务器应用程序,许多(如果不是大多数)服务器应用程序的性能受I / O限制的约束。