-Xdebug标志的开销有多大?

9
我想知道 -Xdebug 标志引入的性能开销有多大?
在生产环境中调试应用程序非常方便,但我猜一直运行可能很昂贵?
此外,有没有一种好方法使已经运行的应用程序通过 Debug 端口进行监听,而不需要重新启动它?
谢谢。
3个回答

5
我们没有发现任何区别。我们都是使用-Xdebug运行我们所有的生产应用程序。
有没有一种好的方法可以将Debug模式添加到已经运行的应用程序中,而不需要重新启动它
这就是-Xdebug所做的。当有人连接调试端口时,调试器会实际启动。

我的意思是,有没有一种方法使应用程序在不使用-Xdebug标志重新启动的情况下侦听调试端口? - SyBer
不,只需始终使用打开调试端口的应用程序运行。 - stepancheg
嗨stepancheg,看起来你有连接jdb到正在运行的进程的经验..你能在这里回答我的问题吗...https://dev59.com/9Yfca4cB1Zd3GeqPo-Is 谢谢。 - nave

4
在Java 6下,我认为性能成本约为15%,在Java 5.0下则约为40%。这可能对您来说是可以接受的。 另一种观察生产过程中正在发生什么的方法是使用JMX / JConsole。这需要一些工作,但开销相对较小,我猜测大约为2%。

JMX允许查看变量吗? - SyBer
1
@SyBer,不要像调试器那样做。您可以创建MXBeans来公开组件的字段,以进行查看/更改/绘图以及其方法,但我建议您使用框架来完成此操作,即使您必须编写自己的框架。 - Peter Lawrey

4
取决于你的代码在做什么。如果你有一个基于网络和数据库驱动的应用程序,那么差异可能是微不足道的,因为瓶颈可能不是JVM执行指令的速度。如果你的所有代码都只是在内存中执行科学计算,那么你可以预期会受到一定的影响。
编辑:
当我写这篇文章时,我认为调试器本身被附加了。仅仅使用-Xdebug运行它本身不会影响性能,正如@stepancheg所指出的那样。然而,我的主要动机不是为了给出技术分析,而是想说即使你让字节码执行时间变长,在典型的Java应用程序中也可能不会有太大影响,因为处理器的利用率不足以成为决定性的性能因素。大多数具有长寿命的应用程序都是服务器应用程序,并且许多(如果不是大多数)服务器应用程序的性能都受到I/O限制的限制。

那么调试主要是受CPU和内存限制的吗? - SyBer
1
马克,你错了。启用调试器不会影响性能,除非你连接到应用程序。即使是科学应用程序也是如此。这要感谢JIT。 - stepancheg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接