Hi Chris,

I have to double check, but I think we have removed this lock in the current code. We still need to cut a release.

On 26/06/2024 20:21, Christopher Popp wrote:
We recently upgraded to 2.2.3 from 2.1.4 to pick up TLS 1.3 support. We ran a 
test and noticed that performance was quite a bit worse trying to get clients 
connected during an inrush of connection attempts. A thread dump showed that 
most of the clients were blocked waiting to acquire a lock on the SslFilter due 
to one of the clients holding it while doing a reverse name lookup:

         at java.net.Inet4AddressImpl.getHostByAddr(java.base@21.0.1/Native 
Method)

         at 
java.net.InetAddress$PlatformResolver.lookupByAddress(java.base@21.0.1/InetAddress.java:1225)

         at 
java.net.InetAddress.getHostFromNameService(java.base@21.0.1/InetAddress.java:840)

         at 
java.net.InetAddress.getHostName(java.base@21.0.1/InetAddress.java:782)

         at 
java.net.InetAddress.getHostName(java.base@21.0.1/InetAddress.java:754)

         at 
java.net.InetSocketAddress$InetSocketAddressHolder.getHostName(java.base@21.0.1/InetSocketAddress.java:83)

         at 
java.net.InetSocketAddress.getHostName(java.base@21.0.1/InetSocketAddress.java:367)

         at 
org.apache.mina.filter.ssl.SslFilter.createEngine(SslFilter.java:314)

         at org.apache.mina.filter.ssl.SslFilter.onConnected(SslFilter.java:278)

         - locked <0x000000068b8337a0> (a org.apache.mina.filter.ssl.SslFilter)

         at org.apache.mina.filter.ssl.SslFilter.onPostAdd(SslFilter.java:250)

         at 
org.apache.mina.core.filterchain.DefaultIoFilterChain.register(DefaultIoFilterChain.java:473)

         at 
org.apache.mina.core.filterchain.DefaultIoFilterChain.addLast(DefaultIoFilterChain.java:234)

         - locked <0x000000070740b0f8> (a 
org.apache.mina.core.filterchain.DefaultIoFilterChain)

         at 
org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder.buildFilterChain(DefaultIoFilterChainBuilder.java:553)

         at 
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.addNow(AbstractPollingIoProcessor.java:832)

         at 
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.handleNewSessions(AbstractPollingIoProcessor.java:752)

         at 
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:652)

         at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)

         at 
java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.1/ThreadPoolExecutor.java:1144)

         at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.1/ThreadPoolExecutor.java:642)

         at java.lang.Thread.runWith(java.base@21.0.1/Thread.java:1596)
         at java.lang.Thread.run(java.base@21.0.1/Thread.java:1583)
It seems like the reverse name lookup is attempted while the common SslFilter 
lock is held whereas previously it wasn't. The clients that connect in come 
from the public internet so the IPs can be unpredictable and we can't rely on 
their name servers being responsive, so waiting on them to be done serially 
would take too long.

Thanks!Chris

--
*Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
elecha...@apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@mina.apache.org
For additional commands, e-mail: users-h...@mina.apache.org

Reply via email to