Thanks Julian for that quick fix.

Chris


Am 24.08.20, 10:39 schrieb "Julian Feinauer" <[email protected]>:

    Hi,

    short feedback. I looked into the code and indeed it seems that we had a  
bug there which could lead tot he socket leak you described.
    I pushed a fix in the branch:

    https://github.com/apache/plc4x/tree/bugfix/close-eventloop-after-channel

    Would you mind taking a look and testing this with your code @Adam Rossi?

    Thanks!
    Juliasn

    Am 24.08.20, 08:26 schrieb "Julian Feinauer" <[email protected]>:

        Perhaps, some related questions:

        - You are using Linux for your Tests?
        - Do you close all Connections properly?
        Normally the `PlcConnection.close()` method should close the EventLoop.

        Julian

        Am 24.08.20, 08:23 schrieb "Julian Feinauer" 
<[email protected]>:

            Hi Adam,

            I will have a look today!

            Do we have a Jira Issue for it already?

            Julian

            Am 24.08.20, 07:38 schrieb "Christofer Dutz" 
<[email protected]>:

                Hi Adam,

                of course that's unfortunate ... also I will not be able to 
address this issue soon as I have to work on the tasks of my research project.
                I have one more month to work on this and I'm months behind 
schedule because I have been doing free support way too much lately.

                I really hope Julian will be able to help ... he's way more 
into the details of Netty than I am (cause he's got the book ;-) ) 

                So Julian? ... it would be super awesome if you could take on 
this issue.

                Chris



                Am 24.08.20, 00:17 schrieb "Adam Rossi" <[email protected]>:

                    Thanks, I did test with 0.8.0-SNAPSHOT and see the same 
behavior. In every
                    plcConnection a nioEventLoopGroup thread is created and 
does not ever seem
                    to be destroyed.

                    I wish I understood the io.netty.channel.EventLoopGroup 
class better to be
                    more helpful here. Would an example program that reproduces 
this thread
                    leak be useful?

                    jconsole shows the thread data as:

                    Name: nioEventLoopGroup-19-1
                    State: RUNNABLE
                    Total blocked: 0  Total waited: 0

                    Stack trace:
                    [email protected]/sun.nio.ch.EPoll.wait(Native Method)
                    [email protected]
                    
/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:120)
                    [email protected]
                    
/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
                       - locked 
io.netty.channel.nio.SelectedSelectionKeySet@1838f97
                       - locked sun.nio.ch.EPollSelectorImpl@1f49287
                    
[email protected]/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141)
                    
app//io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
                    
app//io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:803)
                    
app//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
                    
app//io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
                    
app//io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
                    
app//io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
                    [email protected]/java.lang.Thread.run(Thread.java:830)


                    Regards, Adam

                    On Sun, Aug 23, 2020 at 1:00 PM Christofer Dutz 
<[email protected]>
                    wrote:

                    > Hi Adam,
                    >
                    > the Apache SNAPSHOT repo is at:
                    > 
https://repository.apache.org/content/repositories/snapshots
                    >
                    > Adding this to your pom should help:
                    >
                    >   <!-- Make Snapshots of Apache projects available -->
                    >   <repositories>
                    >     <repository>
                    >       <id>apache-snapshots</id>
                    >       
<url>https://repository.apache.org/content/repositories/snapshots
                    > </url>
                    >       <releases>
                    >         <enabled>false</enabled>
                    >       </releases>
                    >       <snapshots>
                    >         <enabled>true</enabled>
                    >       </snapshots>
                    >     </repository>
                    >   </repositories>
                    >
                    >   <!-- Make Snapshots of Apache plugins available -->
                    >   <pluginRepositories>
                    >     <pluginRepository>
                    >       <id>apache-snapshots</id>
                    >       
<url>https://repository.apache.org/content/repositories/snapshots
                    > </url>
                    >       <releases>
                    >         <enabled>false</enabled>
                    >       </releases>
                    >       <snapshots>
                    >         <enabled>true</enabled>
                    >       </snapshots>
                    >     </pluginRepository>
                    >   </pluginRepositories>
                    >
                    > Chris
                    > Am 23.08.20, 18:56 schrieb "Adam Rossi" 
<[email protected]>:
                    >
                    >     Sure thing. Is 0.8.0-snapshot hosted anywhere or is 
that something
                    > that needs to be built? Regards Adam
                    >
                    >     > On Aug 23, 2020, at 12:31 PM, Christofer Dutz <
                    > [email protected]> wrote:
                    >     >
                    >     > Hmm ...
                    >     >
                    >     > Could you possibly give 0.8.0-SNAPSHOT a try? .... 
or 0.6.x? ...
                    > 0.7.0 was the first of the new generation drivers. We're 
maintaining the
                    > 0.6 branch and working hard on making the new generation 
drivers 100%
                    > production ready.
                    >     >
                    >     > Chris
                    >     >
                    >     >
                    >     > Am 23.08.20, 18:06 schrieb "Adam Rossi" 
<[email protected]>:
                    >     >
                    >     >    This is the latest 0.7.0 release from Maven.
                    >     >
                    >     >
                    >     >    Regards Adam
                    >     >
                    >     >> On Aug 23, 2020, at 11:56 AM, Christofer Dutz <
                    > [email protected]> wrote:
                    >     >>
                    >     >> Hi Adam,
                    >     >>
                    >     >> which version of PLC4X are you using? I know we 
had similar reports
                    > some time ago, but had thought we had fixed them
                    >     >>
                    >     >> Chris
                    >     >>
                    >     >>
                    >     >>
                    >     >> Am 23.08.20, 16:40 schrieb "Adam Rossi" 
<[email protected]>:
                    >     >>
                    >     >>   Howdy. I am seeing a persistent thread being 
created for every
                    >     >>   plcConnection connect which looks like the 
following:
                    >     >>
                    >     >>   Name: nioEventLoopGroup-11-1
                    >     >>   State: RUNNABLE
                    >     >>   Total blocked: 0  Total waited: 0
                    >     >>
                    >     >>   Stack trace:
                    >     >>   [email protected]/sun.nio.ch.EPoll.wait(Native 
Method)
                    >     >>   [email protected]
                    >     >>   
/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:120)
                    >     >>   [email protected]
                    >     >>   
/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
                    >     >>      - locked 
io.netty.channel.nio.SelectedSelectionKeySet@f6df6b
                    >     >>      - locked sun.nio.ch.EPollSelectorImpl@7ffc19
                    >     >>   [email protected]/sun.nio.ch
                    > .SelectorImpl.select(SelectorImpl.java:141)
                    >     >>
                    >  
app//io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
                    >     >>
                    >  
app//io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:803)
                    >     >>   
app//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
                    >     >>
                    >  
app//io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
                    >     >>
                    >  
app//io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
                    >     >>
                    >  
app//io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
                    >     >>   
[email protected]/java.lang.Thread.run(Thread.java:830)
                    >     >>
                    >     >>
                    >     >>   This happens both when creating a connection 
directly or when
                    > using the
                    >     >>   plc4x connection pool.
                    >     >>
                    >     >>   In both cases I am obtaining the connection, 
reading some modbus
                    > values,
                    >     >>   and then closing the connection. From the 
plcConnection metadata
                    > the
                    >     >>   connection type I am using is:
                    >     >>
                    >     >>   
org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection
                    >     >>
                    >     >>   Over time thousands of these nioEventLoopGroup 
threads are
                    > created and I
                    >     >>   experience an OutOfMemory error in my program.
                    >     >>
                    >     >>   Has anyone experienced this problem? Is there a 
way to force
                    > these threads
                    >     >>   to close, timeout, or to specify the total 
thread limit?
                    >     >>
                    >     >>   Thanks and Regards, Adam
                    >     >>
                    >     >
                    >
                    >





Reply via email to