首页 > 解决方案 > 在没有附件的调试模式下运行 Tomcat 会影响性能吗?

问题描述

假设我以调试模式启动 Tomcat,但没有通过远程调试从 IDE 附加到它。我的应用程序会以与正常启动相同的速度运行,还是会影响速度和性能。如果有,那么多少钱?

在不重启 Tomcat 的情况下修复问题时,调试模式非常方便。在生产中以调试模式运行 Tomcat 是不是坏主意?

标签: performancetomcatjvmremote-debuggingproduction

解决方案


“调试模式”意味着 JVM 与jdwp代理一起运行。

JDWP 代理支持大多数JVM TI 功能。其中一些是无害的,但有些确实会对 HotSpot JVM 的性能产生影响。

特别是,can_access_local_variables功能完全关闭逃逸分析。这意味着,某些 JIT 优化(例如分配消除)将不起作用。

其他功能,如can_generate_method_entry_events,can_generate_field_access_eventscan_pop_frame,在解释器中添加额外的检查。

请注意,仅 jdwp 代理的存在就意味着上述开销,即使调试会话未处于活动状态。性能开销通常可以忽略不计,但有时缺少逃逸分析会增加分配压力并使应用程序减慢 5-10%。

此外,具有太多类的应用程序可能会受到jdwp代理的严重影响。有时应用程序甚至可能会挂起,就像在这个问题中一样。有关详细信息,请参阅错误JDK-8227269

即使没有附加调试器,代理也会处理类加载/卸载事件,因此同样,只有代理的存在可能已经导致问题。

简而言之,我不建议在生产环境中启用调试模式。虽然它通常工作得很好,但我多次看到与 jdwp 相关的问题,包括性能开销、冻结和本机内存泄漏。


推荐阅读