【问题标题】:is there an overhead on setting a JVM to listen to debug port?设置 JVM 以侦听调试端口是否有开销?
【发布时间】:2011-06-27 17:48:41
【问题描述】:

我希望能够使用 jdwp 调试生产系统。 为此,我想将 -Xdebug -Xrunjdwp:transport=dt_socket,address=11122,server=y,suspend=n 添加到我正在启动的每个 java 进程中。
如果端口未激活,是否有任何开销?
在这种情况下,我的 JVM 会运行得更慢吗?

【问题讨论】:

  • 我不建议直接调试生产系统。当您启动调试器时,您会干扰 JVM,并可能导致线程暂停等,这可能会产生副作用。出于调试目的,我宁愿制作系统的精确副本。
  • @Thomas 有一个很好的观点(即使开销为零也适用)。如果您确实需要并且小心,也许可以使用生产数据库,但提供一个额外的 JVM(不适用于“真实”请求)进行调试。
  • @Thilo 我也宁愿复制生产数据库而不是意外更改一些数据。我知道即使您认为自己有一个精确的副本,有时也很难找到错误——这可能并不总是正确的(某些服务器/操作系统设置可能不同)——但通常值得付出努力,因为生产系统不是中断或意外损坏。
  • @Thomas。同意。我说“也许”和“小心”。不幸的是,有时棘手的现实问题很难在测试环境中复制(我假设实际上有一个测试环境,它首先被使用,我们正在谈论一个真正需要查看生产的罕见情况数据)。

标签: java jvm remote-debugging


【解决方案1】:

AFAIK,答案是肯定的。 -Xdebug 关闭一些运行时优化等

此外,可以通过 jwdp 连接到 JVM 的事实不是很安全。我认为任何生产环境都不应该允许这样做。

【讨论】:

  • 至于连接,是通过VPN完成的,所以从安全的角度来看,这没什么大不了的。
  • @bestsss 重点是防火墙内的每个人都可以连接到这台机器,基本上可以做任何事情。假设您开发了一个薪资应用程序,而我在您的组织中工作。所以可以登录并给自己一个不错的奖金。你说什么? :)
  • @Tarlog,并记录了该端口的通信;所以这是一个弱的尝试,而且VPN授权是基于客户端证书(+标准防火墙)执行的,你不会拥有它等等。内部攻击当然是最普遍的,主要是松散安全性的 b/c。除非明确:只是 b/c 它是一个 VPN,并不意味着任何人(你)都可以访问它!
  • @bestsss:让我们这样说吧:在生产环境中打开调试端口是一个巨大的弱点。这是否是一个漏洞,这取决于。因此,如果无法连接到特定服务器(包括内部,当根本没有 VPN 时),它可能不是漏洞。至少在授予此类访问权限之前。如果有人会对您的产品进行此类审查,我怀疑它不会通过任何安全审查。
  • @bestsss:此外,谈论安全性并不仅仅意味着完整性 - 更改实际数据。可用性也是一个问题,在调试器中保留所有线程非常容易导致拒绝服务。
【解决方案2】:

如果您实际上没有使用远程调试器连接到此端口,则开销几乎为零(根据我的经验从未注意到它)。

【讨论】:

    【解决方案3】:

    -Xdebug 在调试模式下会慢 5%(Java 5,我没有 Java 6 的数字),因为它无法进行某些优化。

    插座本身并不贵;有一个为它创建的线程挂在accept() 中(所以在有人真正连接到端口之前不会花费任何费用)。

    【讨论】:

    • 不,它没有,当调试连接时,JVM 会取消优化,当加载相同 CH(类层次结构)中的新类时会发生同样的事情。如果你有一个断点,代码就会被解释。
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 2015-07-08
    • 2013-09-24
    • 1970-01-01
    • 2021-02-09
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多