我希望能够使用jdwp调试生产系统。
为此,我想要在启动每个Java进程时添加-Xdebug -Xrunjdwp:transport=dt_socket,address=11122,server=y,suspend=n
。
如果端口未激活,这样做会有任何开销吗?
在这种情况下,我的JVM会运行得更慢吗?
我希望能够使用jdwp调试生产系统。
为此,我想要在启动每个Java进程时添加-Xdebug -Xrunjdwp:transport=dt_socket,address=11122,server=y,suspend=n
。
如果端口未激活,这样做会有任何开销吗?
在这种情况下,我的JVM会运行得更慢吗?
-Xdebug
会关闭一些运行时优化等功能。jmap -dump
; 您可以通过正常手段重新部署在服务器上表现出不良行为的应用程序。关键是:您需要访问该机器,VPN是提供访问的常规方式(再次强调std VPN依赖于客户端证书)。连接VPN后您所做的事情,如ssh或debug,完全是另一回事。Kill
可以完全杀死服务器,因此debug也可能被利用,授权访问又是另一回事。Debug会创建不同的问题:泄漏!由于JNI根在调试期间。 - bestsssjmap
,但仍然可以连接到调试。再次强调:我正在谈论内部访问,因此没有 VPN。 - Tarlog-Xdebug
在调试模式下使程序变慢约5%(Java 5,我没有Java 6的数据),因为它无法执行某些种类的优化。
套接字本身不会花费太多; 为其创建了一个线程,在 accept()
中挂起(因此在实际有人连接到端口之前不会产生任何开销)。