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:
java.base@13.0.2/sun.nio.ch.EPoll.wait(Native Method)
java.base@13.0.2
/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:120)
java.base@13.0.2
/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
   - locked io.netty.channel.nio.SelectedSelectionKeySet@1838f97
   - locked sun.nio.ch.EPollSelectorImpl@1f49287
java.base@13.0.2/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)
java.base@13.0.2/java.lang.Thread.run(Thread.java:830)


Regards, Adam

On Sun, Aug 23, 2020 at 1:00 PM Christofer Dutz <christofer.d...@c-ware.de>
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" <ac.ro...@gmail.com>:
>
>     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 <
> christofer.d...@c-ware.de> 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" <ac.ro...@gmail.com>:
>     >
>     >    This is the latest 0.7.0 release from Maven.
>     >
>     >
>     >    Regards Adam
>     >
>     >> On Aug 23, 2020, at 11:56 AM, Christofer Dutz <
> christofer.d...@c-ware.de> 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" <ac.ro...@gmail.com>:
>     >>
>     >>   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:
>     >>   java.base@13.0.2/sun.nio.ch.EPoll.wait(Native Method)
>     >>   java.base@13.0.2
>     >>   /sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:120)
>     >>   java.base@13.0.2
>     >>   /sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
>     >>      - locked io.netty.channel.nio.SelectedSelectionKeySet@f6df6b
>     >>      - locked sun.nio.ch.EPollSelectorImpl@7ffc19
>     >>   java.base@13.0.2/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)
>     >>   java.base@13.0.2/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