Skip to content

Accepting new connections gets stuck after too many threads have disconnected uncleanly #5

@StrongestNumber9

Description

@StrongestNumber9

Describe the bug

$ tcpflood -t 127.0.0.1 -T relp-plain -p 4600 -m 1000000 -M "<14>1 2020-05-15T13:24:03.603Z performance-test-host performance-test-tag - - - hello" -c 10 -Y
00010 open connections
starting run 1
00002400^Csent
$ tcpflood -t 127.0.0.1 -T relp-plain -p 4600 -m 1000000 -M "<14>1 2020-05-15T13:24:03.603Z performance-test-host performance-test-tag - - - hello" -c 10 -Y
00010 open connections
starting run 1
00002200^Csent
$ tcpflood -t 127.0.0.1 -T relp-plain -p 4600 -m 1000000 -M "<14>1 2020-05-15T13:24:03.603Z performance-test-host performance-test-tag - - - hello" -c 10 -Y
00000 open connections

cfe_35 output

$ java -DserverThreads=8 -Dcfe07LookupPath=src/test/resources/cfe_07 -Dcfe16LookupPath=src/test/resources/cfe_16 -Dkin02LookupPath=src/test/resources/kin_02 -DroutingTargetsConfig=src/test/resources/targetsPerformanceTest.json -DlistenPort=4600 -jar target/cfe_35.jar 
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
16:33:38.424 [pool-2-thread-4] ERROR com.teragrep.net_01.channel.context.EgressImpl - IOException <java.io.IOException: Connection reset by peer> while writing to socket. PeerAddress </127.0.0.1> PeerPort <32846>
16:33:38.423 [pool-2-thread-3] ERROR com.teragrep.net_01.channel.context.EgressImpl - IOException <java.io.IOException: Connection reset by peer> while writing to socket. PeerAddress </127.0.0.1> PeerPort <32864>
16:33:38.428 [pool-2-thread-2] ERROR com.teragrep.net_01.channel.context.EgressImpl - IOException <java.io.IOException: Connection reset by peer> while writing to socket. PeerAddress </127.0.0.1> PeerPort <32856>
16:33:38.429 [pool-2-thread-2] ERROR com.teragrep.net_01.channel.context.IngressImpl - run() threw
java.nio.channels.ClosedChannelException: null
        at sun.nio.ch.SocketChannelImpl.ensureOpenAndConnected(SocketChannelImpl.java:222) ~[?:?]
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:454) ~[?:?]
        at java.nio.channels.SocketChannel.read(SocketChannel.java:630) ~[?:?]
        at com.teragrep.net_01.channel.socket.PlainSocket.read(PlainSocket.java:65) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.readData(IngressImpl.java:237) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.run(IngressImpl.java:103) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]
16:33:38.423 [pool-2-thread-7] ERROR com.teragrep.net_01.channel.context.IngressImpl - run() threw
java.net.SocketException: Connection reset
        at sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) ~[?:?]
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:478) ~[?:?]
        at java.nio.channels.SocketChannel.read(SocketChannel.java:630) ~[?:?]
        at com.teragrep.net_01.channel.socket.PlainSocket.read(PlainSocket.java:65) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.readData(IngressImpl.java:237) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.run(IngressImpl.java:103) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]

<snip>

16:33:48.772 [pool-2-thread-7] ERROR com.teragrep.net_01.channel.context.IngressImpl - run() threw
java.nio.channels.ClosedChannelException: null
        at sun.nio.ch.SocketChannelImpl.ensureOpenAndConnected(SocketChannelImpl.java:222) ~[?:?]
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:454) ~[?:?]
        at java.nio.channels.SocketChannel.read(SocketChannel.java:630) ~[?:?]
        at com.teragrep.net_01.channel.socket.PlainSocket.read(PlainSocket.java:65) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.readData(IngressImpl.java:237) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.run(IngressImpl.java:103) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]
16:33:48.772 [pool-2-thread-7] ERROR com.teragrep.net_01.channel.context.IngressImpl - run() threw
java.nio.channels.ClosedChannelException: null
        at sun.nio.ch.SocketChannelImpl.ensureOpenAndConnected(SocketChannelImpl.java:222) ~[?:?]
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:454) ~[?:?]
        at java.nio.channels.SocketChannel.read(SocketChannel.java:630) ~[?:?]
        at com.teragrep.net_01.channel.socket.PlainSocket.read(PlainSocket.java:65) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.readData(IngressImpl.java:237) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at com.teragrep.net_01.channel.context.IngressImpl.run(IngressImpl.java:103) ~[cfe_35.jar:0.0.1-SNAPSHOT]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) ~[?:?]
16:33:48.772 [pool-2-thread-7] ERROR com.teragrep.net_01.channel.context.EgressImpl - IOException <java.io.IOException: Connection reset by peer> while writing to socket. PeerAddress </127.0.0.1> PeerPort <56494>

Expected behavior

Can connect normally

How to reproduce

Launch server:
java -DserverThreads=8 -Dcfe07LookupPath=src/test/resources/cfe_07 -Dcfe16LookupPath=src/test/resources/cfe_16 -Dkin02LookupPath=src/test/resources/kin_02 -DroutingTargetsConfig=src/test/resources/targetsPerformanceTest.json -DlistenPort=4600 -jar target/cfe_35.jar

Spam tcpflood and cancel it with ^C continuously
tcpflood -t 127.0.0.1 -T relp-plain -p 4600 -m 1000000 -M "<14>1 2020-05-15T13:24:03.603Z performance-test-host performance-test-tag - - - hello" -c 10 -Y

Screenshots

Software version

commit 2eba9c65400b1496ca23d4a295378b2c59891d00 (HEAD -> to-9, origin/to-9)
https://github.com/kortemik/cfe_35/tree/to-9

Desktop (please complete the following information if relevant):

  • OS:
  • Browser:
  • Version:

Additional context

This COULD be rlp_03 issue but same version of server is implemented in rlp_08 and that does not suffer from this same issue.

Metadata

Metadata

Assignees

Labels

assistanceExtra attention, more information or help is neededbugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions