Yupiii !!! good news !!!
Regards, S. On 25/08/2020 15:45, Adam Rossi wrote: > Juilan, > > My apologies - your fix did indeed work. The issue is that > PooledPlcDriverManager does not seem to be calling the close method on the > connection. Switching back to PlcDriverManager from PooledPlcDriverManager > results in your new log comments showing up in the log, and more > importantly no more leaks of the nioEventLoopGroup threads. I have tested > the code in a loop for an hour or so and it is working perfectly. > > The PooledPlcDriverManager seems to intercept the close method on the > plcConnection (lines 125 - 130): > > if ("close".equals(method.getName())) { > LOGGER.debug("close called on {}", plcConnection); > proxyInvalidated.set(true); > keyedObjectPool.returnObject(poolKey, plcConnection); > return null; > } else { > > Which makes sense as it is trying to keep active connections pooled. > However, when this connection is again retrieved from the pool it seems the > plcConnection connects again and creates an additional nioEventLoopGroup > thread, which is never closed. > > I am new to working with this project and Jira. It seems to me that I > should close the issue I just created as your fix does indeed correct the > original issue, and perhaps open another issue on PooledPlcDriverManager > for this thread leak? > > Regards, Adam > > On Mon, Aug 24, 2020 at 4:39 AM Julian Feinauer < > j.feina...@pragmaticminds.de> wrote: > >> 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" < >> j.feina...@pragmaticminds.de>: >> >> 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" < >> j.feina...@pragmaticminds.de>: >> >> 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" < >> christofer.d...@c-ware.de>: >> >> 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" <ac.ro...@gmail.com>: >> >> 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 >> > >> >> > > >> > >> > >> >> >> >> >>
signature.asc
Description: OpenPGP digital signature