netty使用ChunkedWriteHandler发送TextWebSocketFrame消息导致内存溢出

netty版本

		<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.50.Final</version></dependency>

此版本ChunkedWriteHandler 的write方法如下

public class ChunkedWriteHandler extends ChannelDuplexHandler {private final Queue<PendingWrite> queue = new ArrayDeque<PendingWrite>();@Overridepublic void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {queue.add(new PendingWrite(msg, promise));}
}

源码可知所有的消息都会被放置queue队列中,同时也不会触发channel高低水位设置,在大量消息堆积时导致内存无法回收OOM。堆内存分析如下:
在这里插入图片描述
解决:升级netty版本!

		<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.108.Final</version></dependency>

高版本对write方法进行了优化:

public class ChunkedWriteHandler extends ChannelDuplexHandler {private final Queue<PendingWrite> queue = new ArrayDeque<PendingWrite>();@Overridepublic void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {if (this.queueIsEmpty() && !(msg instanceof ChunkedInput)) {ctx.write(msg, promise);} else {this.allocateQueue();this.queue.add(new ChunkedWriteHandler.PendingWrite(msg, promise));}}
}

在加入queue前对消息类型进行了判断,因此TextWebSocketFrame消息将不会进入队列!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/587644.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【tensorflow框架神经网络实现鸢尾花分类—优化器】

文章目录 1、前言2、神经网络参数优化器2.1、SGD2.2、SGDM2.3、Adagrad2.4、RMSProp2.5、Adam 3、实验对比不同优化器4、结果对比 1、前言 此前&#xff0c;在【tensorflow框架神经网络实现鸢尾花分类】一文中使用梯度下降算法SGD&#xff0c;对权重 w w w和偏置 b b b进行更新…

【系统技术演进】2018-2023

引子 2018-2023年&#xff0c;我所在的公司&#xff0c;架构上经历了数次转折、变化&#xff0c;在这个过程中&#xff0c;产生了很多对技术和职业的思考&#xff0c;仅以此来记录&#xff0c;在这个过程中所经历的&#xff0c;以及成长的过程和反思。 故事开始 1.混乱的Dubb…

Java零基础入门-异常、线程(完结篇)

一、本期教学目标 掌握如何自定义异常。自定义异常实战练习。掌握进程/线程的概念及区别。理解并发与并行的区别。掌握如何创建线程。 二、前言 在上一期&#xff0c;我们是重点学习了异常如何声明、如何捕获、finally如何使用&#xff1f;以及对于多个异常怎么处理&#xff…

LeetCode刷题记(一):1~30题

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以…

vscode 重命名很慢或失败 vscode renames are slow

网上问题&#xff0c; 插件问题&#xff08;我遇见的排除&#xff0c;不是&#xff09;被其他程序占用问题&#xff0c;&#xff08;我这边是这个&#xff09; 解决方案&#xff1a; 打开【资源管理器】&#xff0c;使用火绒 或其他软件&#xff0c;查看文件夹 or 文件 被哪个…

【面试八股总结】传输控制协议TCP(二)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、TCP报文段首部 TCP 虽然是面向字节流的&#xff0c;但 TCP 传送的数据单元却是报文段。 一个 TCP 报文段分为首部和数据两部分&#xff0c;TCP 报文段首部的前 20 个字节是固定的&#xff0c;后面有 4n 字节是根据需要…

使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)

目录 前言 基本使用教程 新建远程连接 连接主机 自定义命令 路由追踪 前言 后端开发&#xff0c;必然需要和服务器打交道&#xff0c;部署应用&#xff0c;排查问题&#xff0c;查看运行日志等等。一般服务器都是集中部署在机房中&#xff0c;也有一些直接是云服务器&am…

LLM - 大语言模型 基于人类反馈的强化学习(RLHF)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137269049 基于人类反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback),结合 强化学习(RL) 和 人类反馈 来优化模型的性能。这种方法主要包…

抖音视频关键词批量下载工具|视频爬虫采集软件

抖音视频批量提取工具&#xff0c;搜索即下载&#xff0c;轻松获取所需视频&#xff01; 正文&#xff1a; 想要轻松获取抖音上的精彩视频吗&#xff1f;现在&#xff0c;有了我们的抖音视频批量提取工具&#xff0c;一切变得简单易行&#xff01;Q:290615413无论是针对特定关…

【opencv】教程代码 —videoio(2)将两个视频的每一帧逐一读取并计算其PSNR 和MSSIM...

本教程开始介绍的源代码将对每一帧执行PSNR测量&#xff0c;并且只对PSNR低于输入值的帧进行SSIM测量。为了可视化的目的&#xff0c;我们在OpenCV窗口中展示两幅图像&#xff0c;并将PSNR和MSSIM值打印到控制台。期望看到如下内容&#xff1a; video-input-psnr-ssim.cpp 将两…

Matlab|基于关键场景辨别算法的两阶段鲁棒微网优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该模型主要求解的是微网两阶段鲁棒优化调度问题&#xff0c;与目前大部分用CCG算法不同&#xff0c;模型创新性的采用关键场景辨别法&#xff0c;通过少量的迭代辨别出最恶劣的场景&#xff0c;针对光伏出力的…

Flutter 开发学习笔记(3):第三方UI库的引入

文章目录 前言初始化程序Icon导入如何导入 Toast消息提示框引入简单封装简单使用 Charts图表导入新建pages文件夹存放page简单代码实现效果 总结 前言 Flutter已经发布了有10年了&#xff0c;生态也算比较完善了。用于安卓程序开发应该是非常的方便。我们这里就接入一些简单的…