УТЕЧКА: ByteBuf.release () не был вызван перед сборкой мусора: LoginFilter - PullRequest
0 голосов
/ 18 октября 2018

консольная печать:

io.netty.buffer.AdvancedLeakAwareByteBuf.readBytes (AdvancedLeakAwareByteBuf.java:496) org.springframework.core.io.buffer.NettyDataBuffer.Batty.ffy:) org.springframework.core.io.buffer.NettyDataBuffer.read (NettyDataBuffer.java:38) ipf.gwservice.filter.LoginFilter $ 1.lambda $ writeWith $ 0 (LoginFilter.java:61) реактор.core.publapFableFcribableFluxFase.onNext (FluxMapFuseable.java:107)

строка ошибки: dataBuffer.read (content);

Как это исправить

 ServerHttpResponse response = exchange.getResponse();
        DataBufferFactory bufferFactory = response.bufferFactory();
        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(response) {
            @Override
            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
                if (body instanceof Flux) {
                    Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
                    return super.writeWith(fluxBody.map(dataBuffer -> {
                        byte[] content = new byte[dataBuffer.readableByteCount()];
                        dataBuffer.read(content);
                        ReferenceCountUtil.release(dataBuffer);
                        dataBuffer = null;

                        return bufferFactory.wrap("...........".getBytes(Charsets.UTF_8));
                       }));
                }
                return super.writeWith(body);
            }
        };
        return chain.filter(exchange.mutate().response(decoratedResponse).build()); // replace response with decorator

1 Ответ

0 голосов
/ 26 ноября 2018

При использовании Response Decorator возникает проблема, связанная с чтением байтового буфера.У меня была эта проблема, и после нескольких недель попыток с различными предложениями в качестве опций удалось определить эту проблему с помощью примера приложения - https://github.com/nilavalagansugumaran/gateway-netty-memory-leak-issues.Команда Spring-Gateway предложила мне альтернативный подход, т.е. ModifyResponseBodyGatewayFilter, который, похоже, решил проблему.Фактическая проблема сообщена команде Spring-Gateway https://github.com/spring-cloud/spring-cloud-gateway/issues/664. Надеюсь, это поможет.

...