websocket影响内存泄漏的两个点

WebSocket高并发客户端连接内存溢出问题分析与解决指南 通过合理设计连接管理策略(心跳检测、自动清理)、优化数据存储结构(对象复用、压缩传输)、采用异步非阻塞IO模型,结合监控告警体系,可有效预防WebSocket高并发场景下的内存溢出问题。建议在项目早期即进行容量规划与压力测试,避免线上环境出现严重故障。延伸阅读《Netty in Action》第11章 WebSocket优化Spring官方文档:WebSocket Scaling Strategies。 阅读详情

前段时间一直遇到websocket的内存溢出问题,最后在排除了代码的问题之后,开始查找了框架的问题,最后找到了两个框架会影响到的坑,mark一下,顺便分享给大家

首先说项目:springboot的内置tomcat启动,用的websocket是tomcat内核,spring封装。

现象:启动项目后使用的时候cpu使用率不断增加达到99%,最后长时间运行由于CPU过高,导致无法访问最后报出OOM。使用jstat可以查看到由于新生代不断增长导致频繁gc使cpu使用率过高。

但究其原因是什么?

1.websocket设置

首先是网上查资料,找到一篇这样的帖子,点击这里。这是tomcat的一个设置


默认tomcat为8*1024KB,为了使客户端和服务器传输的信息更大,所以会进行调整,但是tomcat里面的设置是每次通讯都会 new一个上面设置的大小的buffer。这样会增加内存的使用量,所以大小一定要和客户端的同学沟通,不要设置过大。将这个问题改完后比较明显,不会频繁gc。但是在查看jstat时候仍然发现新生代在不断升高。所以不是主要原因

2.tomcat版本

后面我们注释掉了所有逻辑,发现只要启动了websocket,哪怕没有任何连接新生代仍在增长。在最后寻找原因后,终于找到了tomcat版本的问题,由于过去使用的是springmvc,我们使用tomcat9.0.0.M1,所以在springboot上我们升级了springboot默认的版本到tomcat9.0.0.M1。最后我们更改了版本,改回了springboot默认的版本8.5.23。然后....奇迹出现了,cpu正常了....目前还没有查看源码,不过这个坑是找到了,提示各位,springboot推荐的版本还是很稳定的,没有必要的话使用默认版本即可~

jetty9 websocket发送消息死锁,引发内存溢出 最近在做一个金融项目,做了一个网关,用来对接各种终端,长连接不断推送期货行情。(jetty9 websocket) 长连接的方案采用websocket,上线前,做单个终端的压力测试,传输数百万数据,跑了10多小时,一切正常。但是上线后,发现时间不规则的内存溢出,有时可能4天就死了,有时半天就死了,甚是郁闷。 dump出内存堆,使用mat分析,很容易看到byte[]非常大,占60 阅读详情

相关推荐

Dart Futures与Streams核心原理与Flutter实战指南

Futures和Streams是Dart异步编程的两大基石,分别对应‘一次性结果’与‘持续事件流’两类问题。其底层依托单线程事件循环与microtask/event双队列机制,而非JavaScript式的宏/微任务抽象。理解这一模型差异,是解决Flutter中UI卡顿、状态错乱、网络请求失败等高频问题的关键。Futures适用于HTTP请求、文件读取等有始有终操作,强调惰性求值与并行协调(如Future.wait);Streams则天然适配滚动监听、WebSocket、传感器等多发、可取消、需变换的场景,通

weixin_32612263的博客 317

Java WebSocket导致的OOM(内存溢出)问题排查

通过上面排查是messageBufferText过大且链接过多导致的内存溢出,查看messageBufferText大小约20MB,下面查看源码分析messageBufferText是怎么初始化大小的。继续展开,可以发现名为WsFrameServer的类占据了大部分堆内存,再继续展开,可以发现HeapCharBuffer占据了大部分的内存,确定为ws导致的内存溢出。有一个默认值是8K,显然与想要的20MB差距比较大,继续看哪里有赋值了。在代码实现里增加了这个配置,由于char类型占两个字节,10。

csdn_halon的博客 5281

别再乱写WebSocket了!Spring Boot 3.x集成中的3个高频坑点与性能优化指南

本文深入探讨了Spring Boot 3.x集成WebSocket时的3个高频坑点与性能优化方案,包括@ServerEndpoint的Spring Bean注入陷阱、高并发下的连接管理问题以及生产环境必备的认证、心跳与重连机制。通过实战案例和详细代码示例,帮助开发者避免常见错误,提升WebSocket应用的稳定性和性能。

dfu65065的博客 404

[JAVA]websocket引起的内存泄漏问题排查

虽然和C++不同的是,JAVA拥有独特的垃圾回收机制,程序员可以较少的担忧资源回收的问题,但是这种机制并不可能100%防止内存泄漏,一些难以察觉的代码实现或是配置都可能会造成这种机制失效,例如JAVA拥有多种不通强度的引用关系,例如强引用(strong reference),弱引用(weak reference),软引用(soft reference)和虚引用(phantom reference)。的错误,造成系统宕机。需要注意的是,最新版本需要JDK11支持,推荐下载1.7.0版本,只需要JDK8即可。

weixin_52157994的博客 7336

内存泄漏与内存溢出

软件开发 数据库 内存泄露 内存溢出

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

AI智能语音识别模块实战:选型对比与生产环境优化指南

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960196的博客 808

74HC165级联踩坑实录:STM32读取32路开关状态,时序调试与常见问题排查

本文详细介绍了74HC165级联在STM32读取32路开关状态时的时序调试与常见问题排查。从硬件设计的PCB布局优化、电源噪声控制,到软件时序的精确调校和数据采集策略,提供了完整的解决方案。通过逻辑分析仪和示波器的高效使用,解决了信号延迟和干扰问题,最终实现了稳定可靠的32路信号读取。

weixin_34046298的博客 313

WebSocket内存管理终极指南:10个避免内存泄漏的关键策略

在构建实时Web应用时,WebSocket技术提供了强大的双向通信能力,但同时也带来了内存管理的挑战。本文将为你揭示WebSocket内存管理的核心策略,帮助你构建高效稳定的实时应用。 ## 为什么WebSocket内存管理如此重要? WebSocket连接在服务器和客户端之间建立持久连接,这意味着连接对象、消息缓冲区、会话数据等都需要长期驻留在内存中。如果不加以妥善管理,这些资源会逐渐累积,

gitblog_00058的博客 669

ESP32驱动Xbox Series X手柄的BLE协议实现

蓝牙低功耗(BLE)是嵌入式设备无线交互的核心技术,其GATT协议架构支持自定义服务与特征值通信,广泛应用于游戏外设、工业遥控等场景。Xbox Series X手柄采用非标准私有BLE协议,需深度解析输入报告(64字节)、输出控制(振动/LED)及固件兼容性约束。该方案依托ESP32平台与NimBLE 2.1.0+协议栈,解决MTU协商、PHY配置与HCI事件同步等关键问题,实现125Hz实时输入采集与毫秒级振动反馈。适用于机器人遥操作、ROS2终端、LVGL交互界面等工程实践,是私有BLE设备逆向集成的典

weixin_42610671的博客 710

ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04

所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。其采用的相机和IMU传感器,在硬件上进行了时间同步。

琉璃轻纱的博客 1万+

TOMCAT websocket 多连接内存泄漏与jetty对比分析

服务器环境8核 32G内存 问题: 在5000个连接的时候Tomcat内存基本吃满 Tomcat 压测: 连接数 内存消耗 CPU 1000 6.9G 100% 2000 12G 100% 3000 19G 100% 4000

Leon_Jinhai_Sun的博客 1417

BGE-Reranker-v2-M3介绍

重排序模型介绍

吉米_王 5892

实时数据可视化库选型与性能优化:从监控大屏踩坑到实战方案

数据可视化是前端工程中的基础能力,但静态图表与实时图表的本质差异,往往被很多开发者忽略。实时数据可视化要求对无限增长的数据流做窗口截断、缓冲管理、高频重绘与降采样处理,其核心技术原理在于将数据接入、渲染更新与生命周期控制解耦。掌握这些原理,不仅能提升监控大屏、运营看板等场景下的页面流畅度,还能有效避免内存泄漏与图表拖影问题。WebSocket、Canvas 及消息队列的合理选型,决定了系统能否承受每秒数千点的数据吞吐。从前端性能优化到工程落地,实时可视化库的实践价值正在于让数据与画面保持同步。本文结合监控大

weixin_32181267的博客 219

【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍

Animancer与Unity Animator对比及使用指南 摘要: 本文对比了Animancer与Unity官方Animator的核心差异,分析了Animancer的优势特点。Animancer采用代码驱动模式,相比Animator的状态机系统更灵活高效,支持实时调试、动态混合和深度逻辑集成。文章详细介绍了Animancer的快速使用方法,包括动画播放、切换和触发机制,并区分了免费版与专业版的功能差异。适合需要高效动画开发、复杂交互逻辑的中小项目,为开发者提供了一种现代化的动画解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2434

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

使用jmeter对websocket服务做压测

本文主要讲述了Jmeter使用流程,以及websocket压测的注意事项,可以会受到哪些因素影响。

m0_59104232的博客 4039

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 289

Redis订阅模式在生产环境引起的内存泄漏

内存泄漏

luxsongx的博客 670

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Rust WebSocket内存泄漏难题破解:5步定位与优化实战案例解析

解决Rust WebSocket开发中常见内存泄漏难题,通过5步定位法精准排查问题。涵盖异步任务管理、资源释放时机、弱引用优化等核心技巧,适用于高并发实时通信场景。实战案例解析助你提升服务稳定性,值得收藏。

CodeTrick的博客 311

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++ WebSocket安全加固全解析(防御DDoS、劫持与内存泄漏的6道防线)

掌握C++ WebSocket开发中的安全核心要点,构建高可用通信系统。详解防御DDoS、会话劫持与内存泄漏的6层防护机制,涵盖心跳检测、加密传输与资源管理,提升服务稳定性与安全性,值得收藏。

StepNexus的博客 409

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WebSocket聊天室并发压测实战:从连接风暴到内存泄漏排查

实时通信系统依赖WebSocket长连接来支撑多用户同时在线,但连接管理、消息广播和资源释放的复杂性远超普通HTTP接口。高并发场景下,服务端不仅要处理建连洪峰,还要保证消息时序一致,避免内存泄漏拖垮进程。性能压测是验证系统承载能力的关键手段,通过逐步加压、监控事件循环延迟和资源占用,可以精准定位同步阻塞、广播竞态和session泄漏等隐患。这些技术原理与排查方法广泛应用于在线教育、协同办公、直播互动等实时互动场景。本文以多用户聊天室为对象,完整展示了从测试环境搭建、压测执行到问题修复的全过程,为同类Web

weixin_34005090的博客 209

一文让你全面认识WebSocket压测!

OOM:内存溢出,需要长时间的压测,观察内存是否释放,比如:每秒%0.1的内存占用累加,最后OOM服务假死:大量发送同步消息,CPU占满,导致假死,现象有:1 客户端全部断开2 服务占用CPU100%,一直不释放3 服务停止打印日志4 CLOSE_WAIT关闭很慢。

q—qun1150305204的博客 3057

Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到

Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到

qq_40102411的博客 1673

CentOS下Node.js与WebSocket环境搭建与优化指南

WebSocket协议作为HTML5标准的一部分,实现了浏览器与服务器间的全双工通信,是构建实时Web应用的核心技术。其基于TCP协议,通过HTTP升级握手建立持久连接,相比传统轮询方案显著降低延迟和带宽消耗。Node.js凭借其非阻塞I/O特性,成为实现WebSocket服务的理想平台,特别适合聊天系统、实时游戏等场景。在CentOS系统中,通过NVM管理Node.js版本可解决多版本共存问题,配合ws模块能快速搭建高性能WebSocket服务。针对生产环境,需关注心跳检测、Nginx反向代理等关键配置,

cuanjingyue4687的博客 417
上一篇: websocket存储session(适合聊天,转发,广播,服务器主动发送消息)
下一篇: springboot遇到autowire注入为null的问题
ZERO_No1
博客等级 码龄12年 14粉丝 14原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值