FULL PRODUCT VERSION : java version "1.5.0_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05) Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Linux kernel 2.6.15 and higher EXTRA RELEVANT SYSTEM CONFIGURATION : See Linux Kernel bug and developers response that its actually a JDK but with inappropriate use of Nagles Algorithm. http://bugzilla.kernel.org/show_bug.cgi?id=6177 A DESCRIPTION OF THE PROBLEM : Debugging under Linux 2.6.15 and higher is horribly slow because of remote debuggings use of many small packets and TCP_NODELAY being set on. (While we can control the socket on the debugger client the socket in the JDK probably *shouldn't* set TCP_NODELAY for debugger sockets or at least their should be an option to not enable TCP_NODELAY) The slow down increases with with size of the debug frame. (The more variables the larger the slow down.) STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Fire up netbeans, eclipse, Intellij or any debugger and attach to a JDK on Linux while running kernel 2.6.15 or higher. Set some break points and start stepping through code. If the frame has a collection with say 100 items in it step through a for loop of each item. It will take an hour or so. In order to at least partially disable Nagles Algorithm run "sudo sysctl -w net.ipv4.tcp_abc=0" as root and then rerun the test. It will perform as expected. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Should be fast ACTUAL - Very slow (hours) REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- Any code with lots of member variables. A good test is to remote debug the java petstore and set some break points while iterating over code. ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : run "sudo sysctl -w net.ipv4.tcp_abc=0" as root to disable Nagles prior to debugging. However this disables it system wide and isn't appropriate!!!!
|