在调试通常在90秒内就绪的java进程时,我的服务器应用程序在10分钟后保持超时,因为我在断点甚至有机会跳转之前设置了一个方法入口断点。
根据对此SO问题的接受答案,这至少部分是由于在设置了入口断点时禁用了Hotspot JIT编译器。 Why does the debugged program slow down so much when using method entry debugging?
然而,我的JVM似乎运行速度慢了几个数量级。我正在调试的过程是多线程的,我通过eclipse远程调试。在设置入口断点时查看任务管理器显示,一个核心执行的工作量远远超过其他核心。删除断点后,核心的负载更均匀。
虽然至少有一些缓慢可以通过禁用JIT编译来解释,但我想知道方法入口断点是否检查每个方法调用的调试器进程,实际上导致线程在远程调试器进程上为每个进行同步方法调用。对我来说,似乎这可能导致比JIT的损失更显着的减速。
答案 0 :(得分:0)
我认为方法输入断点不会导致所有调用都被检查,而且我没有阅读任何具体确认此行为的内容。
Java Debug Interface在遇到任何断点时提供事件线程暂停策略,我想您可能已经知道这些策略。我希望整个工作线程的数量会下降,甚至可能比你预期的更多线程被暂停,结果整体吞吐量大幅下降。
另外,既然您是远程调试,那么网络是否有可能出现延迟等问题?