Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6401245

Small JDWP packets with the socket transport causes slow debugging on linux 2.6.15 kernel and newer

XMLWordPrintable

    • b79
    • x86
    • linux

        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!!!!

              jjh James Holmlund (Inactive)
              tbell Tim Bell
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: