首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧集成聚合器内存泄漏

弹簧集成聚合器内存泄漏
EN

Stack Overflow用户
提问于 2016-01-28 15:20:21
回答 1查看 1.1K关注 0票数 1

我们有一个小型的弹簧集成通道系统,它在应用程序的高负载上引入了内存泄漏。我们创建这个示例应用程序仅仅是为了测试spring聚合器。

SI应用示例Git项目

两种情况下的堆转储

Messenger类中,我们控制提交线程在提交下1000条消息之前将1000条消息传递到通道后休眠的时间。

代码语言:javascript
运行
复制
    public void run() {
    int correlationId = 0;
    while (true) {

        for (int sequenceNumber = 0; sequenceNumber < sequenceSize; sequenceNumber++) {
            Job jp = new Job(name);
            Message<Job> message2 = MessageBuilder.withPayload(jp)
           .setSequenceNumber(sequenceNumber)
           .setSequenceSize(sequenceSize)
           .setCorrelationId(correlationId).build();

           channel.send(message2);
        }

        try {
            Thread.sleep(100, 0);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        correlationId++;
        if (correlationId >= CORRELATION_ID_MAX) {
            correlationId = 0;
        }
    }

我们认为,在正常操作中,当内存TreeMap$Entry占用大量具有大量实例的堆内存时,当睡眠时间减少到非常低的数量时,HashMap$Node开始成为一个问题。

在低负载时没有内存泄漏

高负载内存泄漏时的

HashMap$Node将永远提高其内存利用率。

在从聚合器接收到聚合消息列表之后,我们正在从通道messageOutChannel打印终端上的列表项。

代码语言:javascript
运行
复制
Time :   647 ms  List size : 1000   Hash : 875023460    By thread : th0  -FP

在内存泄漏情况下,时间将不断增加,当不处于内存泄漏情况时,它将在一个数字附近变得稳定。

希望有人能对此有所了解,并表明我们在这里做错了什么?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-01 14:50:17

这与聚合器无关;内存“泄漏”仅仅是因为您在任务执行器中排队处理大量任务,并且对其队列大小没有限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35065313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档