memory leakage ,when write point to influxdb 2.2 invoked in a CompletionStage<PlcReadResponse>

97 Views Asked by At

I'm trying to write PLC data into influxDB; and PLC4X EIP driver used when I use sync solution ,everything is OK; but When I try the Async solution the heap leakage will always happen my code as below:

        CompletionStage<ArrayList<Point>> cf = resp.thenApply((r) -> {
            Map<String, Object> field = new HashMap<String, Object>();
            ArrayList<Point> points = new ArrayList<>();
            for (String fieldName : r.getFieldNames()) {
                if (r.getResponseCode(fieldName) == PlcResponseCode.OK) {
                    int counter = r.getNumberOfValues(fieldName);
                    for (int i = 0; i < counter; i++) {
                        field.put(fieldName, r.getObject(fieldName, i));
                    }
                    points.add(Point.measurement(getMeasurement()).addTags(getInfluxTags(fieldName))
                            .addFields(field).time(Instant.now(),WritePrecision.MS));
                    writeapi.writePoints(points);//this is the influxdb write API Version 6.0.0
                    log.trace("AAAAAsync write to influxdb measurement={},tag={},field={}",
                            getMeasurement(),getInfluxTags(fieldName),field);
                }
            }
            return points;
        });

the issue is when writeapi be used in lambda, it looks hold the reference of the lambda , and never can release , So How can I solve it ? make the GC working fine.

0

There are 0 best solutions below