-
Bug
-
Resolution: Fixed
-
P3
-
6u30, 7, 7u4
-
b06
-
generic, x86, sparc
-
generic, solaris_10, windows_7
-
Not verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2223051 | 8 | Bradford Wetmore | P3 | Closed | Fixed | b36 |
JDK-2223053 | 6u34 | Mala Bankal | P3 | Closed | Fixed | b03 |
JDK-2223054 | OpenJDK6 | Mala Bankal | P3 | Resolved | Fixed | b26 |
JDK-2223052 | 5.0u38 | Mala Bankal | P3 | Closed | Fixed | b02 |
JDK-2226683 | 5.0u36 | Mala Bankal | P3 | Resolved | Fixed | b32 |
JDK-2223055 | 1.4.2_40 | Mala Bankal | P3 | Closed | Fixed | b02 |
JDK-2226684 | 1.4.2_38 | Mala Bankal | P3 | Resolved | Fixed | b31 |
Although we are testing on JDK 7u4, I have tracked the regression to JDK 7u1 b06 when the code to split the first record data was added. If I run with -Djsse.enableCBCProtection=false then performance returns to normal.
The comment in that code indicates that we don't need to split if the TLS version is 1.1 or greater. In this case, the client is talking to a Java appserver also running with the JDK 7u4 JSSE libraries, so I'm not sure why it didn't negotiate an appropriate protocol to skip this.
The other odd thing I notice is that we don't seem to be writing the appropriate amount of data. If I turn on SSL debugging with the default behavior, I see this:
Thread-0, WRITE: TLSv1 Application Data, length = 80 // FIRST REQUEST
Thread-0, READ: TLSv1 Application Data, length = 160
Thread-0, READ: TLSv1 Application Data, length = 32
Thread-0, READ: TLSv1 Application Data, length = 240
Thread-0, WRITE: TLSv1 Application Data, length = 32 // SECOND REQUEST
Thread-0, WRITE: TLSv1 Application Data, length = 80
Thread-0, READ: TLSv1 Application Data, length = 32
Thread-0, READ: TLSv1 Application Data, length = 160
Thread-0, READ: TLSv1 Application Data, length = 32
Thread-0, READ: TLSv1 Application Data, length = 240
The code is writing the same request repeatedly, so the data length of the first two requests should be the same; I'm not sure why in the second request we send a total of 112 bytes. But maybe that is just the way it works; I see that the server response in the first case (where it also didn't split the request) is a total 432 bytes but in the second case (it's second write, hence now splitting) also has an extra 32 bytes. When I add the -Djsse argument only to the client, the server still sends the extra 32 byte record but the client performance is back to normal.
- backported by
-
JDK-2223054 JSSE client sockets are very slow
- Resolved
-
JDK-2226683 JSSE client sockets are very slow
- Resolved
-
JDK-2226684 JSSE client sockets are very slow
- Resolved
-
JDK-2223051 JSSE client sockets are very slow
- Closed
-
JDK-2223052 JSSE client sockets are very slow
- Closed
-
JDK-2223053 JSSE client sockets are very slow
- Closed
-
JDK-2223055 JSSE client sockets are very slow
- Closed
- duplicates
-
JDK-7133330 LDAP/SSL Performance degradation in JDK 1.6.0_29/30
- Closed
- relates to
-
JDK-7173811 setTcpNoDelay(false) interact wrongly with JSSE
- Closed
-
JDK-8013809 deadlock in SSLSocketImpl between between write and close
- Closed