On Wed, 2022-04-27 at 07:30 +0000, Christofer Dutz (Jira) wrote:
> 
>     [
> https://issues.apache.org/jira/browse/PLC4X-339?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17528601#comment-17528601
>  ]
> 
> Christofer Dutz commented on PLC4X-339:
> ---------------------------------------
> 
> I guess in the end er really should get rid of Netty ... it just adds
> loads of complexity and problems like this ... plc4go and plc4c also
> work fine without any Netty.
> 
Go and C don't use Java libraries for networking protocols like TCP or
UDP I guess, but isn't Netty sort of integral to the communication
stack right now? Just asking is all. I mean it is pretty powerful for
setting up TCP and UDP connections, and serial AFAICT.
> > modbus connection causes memory leak
> > ------------------------------------
> > 
> >                 Key: PLC4X-339
> >                 URL:
> > https://issues.apache.org/jira/browse/PLC4X-339
> >             Project: Apache PLC4X
> >          Issue Type: Bug
> >          Components: Driver-Modbus
> >    Affects Versions: 0.9.0
> >         Environment: Windows 10; jdk1.8 32bit
> >            Reporter: liangjian
> >            Priority: Major
> > 
> > Note: The version is 0.9.1.
> > 1. The document
> > (here)[https://plc4x.apache.org/users/protocols/modbus.html] seems
> > wrong. It tells me the connection string format is: "modbus-
> > tcp:tcp://127.0.0.1:502", but my test code throws exception saying
> > no driver until I change it to "modbus://127.0.0.1".
> > 2. My test code writes (or reads) some value via modbus tcp every 1
> > second, using short tcp connection (open and close every time).
>From the Netty documentation

"Please note that, close() also might not close the connection
immediately, and it returns a ChannelFuture."

How is the future being handled? Close doesn't always close immediately
according to what it says in the netty documentation at
https://netty.io/wiki/user-guide-for-5.x.html


> >  The memory increases every second until out-of-memory. In process
> > monitor I find the thread count  increases 1 every time the
> > connection opens, but never releases, althought I consider the
> > `try-block` shall closes it automatically. In fact, I see it calls
> > `connection.close` after the `try-block`.
Does connection.close return success? Or anything? Possibly it needs to
reflect that the close operation sometimes doesn't happen immediately
upon request. Again, just asking here since this is an asynchronous
operation, and the thread would stay open until the future completed I
would think.
> > Test code:
> > ```java
> >         while (true) {
> >             String connectionString = "modbus://127.0.0.1";
> >             try (PlcConnection plcConnection = new
> > PlcDriverManager().getConnection(connectionString)) {
> >                 PlcWriteRequest.Builder builder =
> > plcConnection.writeRequestBuilder();
> >                 builder.addItem("value-1", "holding-
> > register:1:DINT", 30000);
> >                 builder.addItem("value-2", "holding-
> > register:3:REAL", 3.14);
> >                 PlcWriteRequest writeRequest = builder.build();
> >                 PlcWriteResponse response =
> > writeRequest.execute().get();
> >                 
> >                 for (String fieldName : response.getFieldNames()) {
> >                     if(response.getResponseCode(fieldName) ==
> > PlcResponseCode.OK) {
> >                         System.out.println("Value[" + fieldName +
> > "]: updated");
> >                     }
> >                     // Something went wrong, to output an error
> > message instead.
> >                     else {
> >                         System.out.println("Error[" + fieldName +
> > "]: " + response.getResponseCode(fieldName).name());
> >                     }
> >                 }
> >                 System.out.println("done");
> >             }
> >             Thread.sleep(1000);
> >         }
> > ```
> > It shows the connection is not cleaned properly. 
> > I see it's more efficient to do this using long tcp connection
> > (reuse 1 connection or use a pool). But short tcp connection should
> > also work.
Possibly the "long tcp connection" (is this in time/duration?) success
is an indicator that the future promise has completed?
> >  

> 
> 
> 
> --
> This message was sent by Atlassian Jira
> (v8.20.7#820007)

Regards,
Stephen

Reply via email to