在Java中使用webflux和netty,rss不断增加并且rss大于堆内存

问题描述 投票:0回答:1

我的 Java 程序有问题。我用top查看了一下,发现RSS资源远大于堆内存的最大值。 这是我的代码,非常简单

    @RequestMapping("/test")
    public Mono<BridgeResopnse> test(@RequestParam("num") Integer num, @RequestParam("size") Integer size) {
        log.info("PlatformDependent.usedDirectMemory(): {} MB", PlatformDependent.usedDirectMemory() / 1024 / 1024);
        return Mono.fromCallable(() -> {
            BridgeResopnse bridgeResopnse = new BridgeResopnse();
            bridgeResopnse.setContent(getContent(num, size));
            bridgeResopnse.setCrc("crc");
            return bridgeResopnse;
        });
    }

    private static String getContent(int num, int size) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < num; i++) {
            sb.append(RandomUtil.randomString(size)).append(";\n");
        }
        return sb.toString();
    }

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BridgeResopnse {
    String content;
    String crc;
}

这是我的java配置: java -Xms512m -Xmx512m -XX:+UseG1GC -jar demo.jar jdk:jdk1.8.0_151 netty 核心:4.1.94.Final 这是我的压力测试设置和 rss

 /test?num=1000&size=2400 ,return response size is 2.29mb

在此输入图像描述 在此输入图片描述

另外,当我增加返回的数据量时,可能会导致OutOfDirectMemoryError。这时候日志就报错了。这是正常的,但是此时RSS也在增加,并且随着压力测试停止,RSS会很大。请看下图。 这是我的压力测试设置和 rss

/test?num=1000&size=5000 ,return response size is 4.77mb

在此输入图像描述 在此输入图片描述

out-of-memory rss spring-webflux netty
1个回答
0
投票

抱歉,我忘记附上最后压测后的rss资源使用图了,rss占用了1069m,很不正常。直接删除内存会导致泄漏吗?查看netty源码没有发现重大泄露 在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.