当前位置: 首页 > news >正文

一次内存泄露排查

前因: 因为测试 长时间压测导致 接口反应越来越慢,甚至 导致服务器 崩溃

排查过程

1、top  查看是 哪个进程  占用 内存过高

2、根据 进程 id 去查找 具体是哪个 程序的问题

ps -ef| grep  41356  可以看到 具体的 容器位置

排查该进程 对象存活 状态,(如果有异常  大量自建对象创建的话,也能初步定位到问题)

jmap -histo:live 41356 | more

当然 我们也可以  根据条件 进行过滤  jmap -histo:live 41356 | grep 'com.XX'  

 亦 或者将 其存储到  文本中 进行查看  jmap -histo:live 41356 >a.log

3、生成 dump 文件,使用  jprofiler   或者 eclipse的 Mat插件 进行分析

jmap -dump:live,format=b,file=heap.hprof 41356

 4、我这边是因为有个同事  使用  netty框架 , 然后没有  开启 bytebuf  池。导致 大量 数据请求 直接  虚拟机内存 。下面贴一个  修改后的  参数配置

5、中间 设置过   容器的 jvm  参数,去控制内存大小。因为用的 Java 8 。需要加上最后两个参数去限制  元空间的  大小。(这只是 治标,最重要还是找到问题 )

jmap -heap 41356 打印heap的概要信息,GC使用的算法,heap(堆)的配置及JVM堆内存的使用情况
JAVA_OPTS="-server -Xms1g -Xmx1g -XX:PermSize=128m -XX:MaxPermSize=256m -XX:MaxNewSize=256m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m"
public void startServer(int port) {try {this.serverBootstrap = new ServerBootstrap();if (SystemUtil.getOsInfo().isWindows()) {this.bossGroup = new NioEventLoopGroup(1, new DefaultThreadFactory("BOSSGROUP_"));this.workerGroup = new NioEventLoopGroup(new DefaultThreadFactory("WORKGROUP"));this.serverBootstrap.channel(NioServerSocketChannel.class);} else {this.bossGroup = new EpollEventLoopGroup(1, new DefaultThreadFactory("BOSSGROUP_"));this.workerGroup = new EpollEventLoopGroup(new DefaultThreadFactory("WORKGROUP"));this.serverBootstrap.channel(EpollServerSocketChannel.class);}this.serverBootstrap.group(bossGroup, workerGroup)// 此hander是所有客户端连接都会经过的hander,就是只有这一个hander 单例.handler(new LoggingHandler(LogLevel.WARN))// 此hander是所有客户端都有一个hander,工厂模式创建出hander.option(ChannelOption.SO_BACKLOG, 1024) // 输入连接指示(对连接的请求)的最大队列长度。如果队列满时收到连接指示,则拒绝该连接。FIFO(先进先出)的原则.childOption(ChannelOption.SO_KEEPALIVE, true)//开启时系统会在连接空闲一定时间后像客户端发送请求确认连接是否有效.childOption(ChannelOption.TCP_NODELAY, true)//关闭Nagle算法 NAGLE算法通过将缓冲区内的小封包自动相连,组成较大的封包,阻止大量小封包的发送阻塞网络,从而提高网络应用效率。但是对于时延敏感的应用场景需要关闭该优化算法;.option(ChannelOption.SO_REUSEADDR, true).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000).childOption(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(8 * 1024, 32 * 1024))//        .childOption(ChannelOption.SO_LINGER, 5)//连接关闭时,偿试把未发送完成的数据继续发送,(等待5秒).childOption(ChannelOption.SO_SNDBUF, 1048576)//系统sockets发送数据buff的大小.childOption(ChannelOption.SO_RCVBUF, 1048576)//---接收.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)//使用bytebuf池, 默认不使用.childOption(ChannelOption.RCVBUF_ALLOCATOR, AdaptiveRecvByteBufAllocator.DEFAULT);//使用bytebuf池, 默认不使用System.out.println("内网端口启动:" + port);LOGGER.info("Netty start at port:" + port);this.serverBootstrap.bind(new InetSocketAddress(port)).sync();} catch (InterruptedException e) {e.printStackTrace();}}

相关文章:

一次内存泄露排查

前因: 因为测试 长时间压测导致 接口反应越来越慢,甚至 导致服务器 崩溃 排查过程 1、top 查看是 哪个进程 占用 内存过高 2、根据 进程 id 去查找 具体是哪个 程序的问题 ps -ef| grep 41356 可以看到 具体的 容器位置 排查该进程 对象存活 状态…...

「Mac安装ps」Adobo Photoshop 2023 下载安装详情教程,支持 AI 插件的 24 版 Photoshop

前言 Adobo Photoshop 2023 已推出,由于目前AI人工智能技术火爆,而很多的 AI 插件最低也需要24版的 photoshop ,所以这里我遍搜集并整理了此新版本的 photoshop 安装使用教程,后续也将提供 AI 插件的下载安装教程 安装文件下载 …...

Redis单线程还是多线程?IO多路复用原理

目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、Redis6.0引入多线程四、Redis主线程和IO线程是如何完成请求的?1、服务端和客户端建立socket连接2、IO线程读取并解析请求3、主线程执行请求命令4、IO线程会写回socket和主线程清…...

小菜鸟Python历险记:(第五集)

今天写的文章是记录我从零开始学习Python的全过程。在Python中对方法进行备注的时候,往往都是写在方法中的第一行所在位置。在书写注释以后,在调用方法的时候,鼠标点击方法会有一个浮动的提示显示备注内容。具体如下图所示:注释的…...

【思维模型】五分钟了解<复利思维>,为何学习复利思维?什么是复利思维?如何应用复利思维?

【思维模型】五分钟了解<复利思维>,为何学习复利思维?什么是复利思维?如何应用复利思维?1. 为何学习复利思维?2. 什么是复利思维?3. 如何应用复利思维?4. 小结参考&#…...

Vue.js语法详解:从入门到精通

Vue.js是一个流行的JavaScript框架,用于构建用户界面。它的核心特性包括数据双向绑定、组件化架构、虚拟DOM和响应式系统等。在本文中,我们将深入探讨Vue.js的语法,帮助读者更好地理解和应用Vue.js。1.模板语法Vue.js的模板语法采用了类似HTM…...

程序员的代码行数越少越好?

有些人可能会认为,应用程序中的代码行越少,就越容易阅读。这句话只有部分正确,我认为代码可读性的度量标准包括:代码应具备一致性代码应具备自我描述性代码应具备良好的文档代码应使用稳定的现代功能代码不应过于复杂代码的性能不…...

【每日一题Day156】LC1032字符流 | 字典树

字符流【LC1032】 设计一个算法:接收一个字符流,并检查这些字符的后缀是否是字符串数组 words 中的一个字符串。 例如,words ["abc", "xyz"] 且字符流中逐个依次加入 4 个字符 a、x、y 和 z ,你所设计的算法…...

V2G模式下含分布式能源网优化运行研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 📋📋📋本文目录如下:🎁🎁🎁 目录 💥1 概述 📚2 运行结果 &am…...

手写一个简单的RPC框架

学习RPC框架,由繁化简,了解其本质原理 文章目录项目简介什么是RPC?项目模块项目代码common模块client模块server模块framework模块测试项目简介 什么是RPC? RPC(Remote Procedure Call)即远程过程调用&am…...

【剑指offer】旋转数组的最小数字

👑专栏内容:剑指offer⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录一、题目描述1、题目2、示例示例1示例2二、题目分析1、暴力法2、二分法三、代码汇总1、暴力法2、二分法一、题目描述 1、题…...

【Dorker】Portainer轻量级可视化工具

文章目录Portainer简介登录Portainer第一次登录需创建admin,访问地址:xxx.xxx.xxx.xxx:9000选择local选项卡后本地docker详细信息展示安装nginx私有镜像仓库管理Portainer简介 Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板…...

基于 vue.js 进行组件封装的方案

摘要:本文将介绍如何基于 vue.js 进行组件封装的方案。我们将从分析组件封装的优势开始,然后依次介绍 vue.js 的基本概念,以及如何创建、封装和使用自定义组件。最后,我们将通过一个实际的示例,演示如何实现一个基于 v…...

【Unityc#专题篇】之c#基础篇

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…...

Python(白银时代)——模块、包、异常

异常 概念 程序运行时,如果Python 解释器遇到了错误,会停止程序运行,并且提示错误信息,这就是异常 程序停止执行并提示错误信息的动作,称为 抛出异常 异常捕获 try: 里面的代码,不确定是否能够正常执行. …...

小程序和Vue写法的区别

小程序和Vue写法的区别主要有以下几点: 语法不同:小程序使用的是WXML、WXSS和JS,而Vue使用的是HTML、CSS和JSX。 数据绑定方式不同:小程序使用的是双向数据绑定,而Vue使用的是单向数据流。 1)在小程序中需…...

如何实现分布式锁

一、锁的作用 锁是为了解决多线程情况下,对于共享资源的访问安全问题。 但是当系统是分布式的时候,本地锁已经没法锁住所需要的资源,因为本地获取了锁,其他系统无法得知本地锁的情况。 分布式锁,是独立于系统的第一方…...

使用VS2019连接Microsoft SQL Server Compact 4.0数据库

简介 SQL Server Compact Edition是微软推出的一个适用于嵌入到移动应用的精简数据库产品,Windows Mobile开发人员能够使用SQL Server CE开发出将数据管理能力延展到Window Mobile移动设备上的应用程序。虽然SQL Server CE占用的磁盘空间只有3到5兆左右&#xff0c…...

Vue2 和 Vue3 的对比

Vue2 vs Vue3 Vue 是一款流行的 JavaScript 框架,用于构建交互式 Web 界面。Vue2 和 Vue3 是 Vue.js 的两个版本。Vue3 是 Vue.js 的最新版本,于 2020 年 9 月正式发布。Vue3 有许多改进和新功能,下面我们将对 Vue2 和 Vue3 进行比较。 性能…...

[数据结构]二叉树的链式存储结构

目录 二叉树的链式存储结构:: 1.创建一颗二叉树 2.二叉搜索树简介 3.前序、中序以及后序遍历 4.层序遍历 5.求一棵树的节点个数代码实现 6.求一棵树的高度代码实现 7.求叶子节点个数代码实现 8.求第K层节点个数代码实现 9.二叉树查找值为x的节点 二叉树…...

忍者像素绘卷微信小程序开发:生成图水印添加与版权保护机制实现

忍者像素绘卷微信小程序开发:生成图水印添加与版权保护机制实现 1. 项目背景与需求分析 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,它融合了忍者文化与16-Bit复古游戏美学,为用户提供独特的创作体验。随着用户生成内容…...

现在不升级Polars 2.0清洗栈,你的ETL将在Q3面临300%延迟增长——基于AWS Graviton+Arrow 15.0实测基准报告

第一章:Polars 2.0清洗栈升级的必要性与Q3延迟危机预警Polars 2.0 的清洗栈重构并非功能叠加式演进,而是面向真实数据工程场景的范式重置。随着企业级ETL流水线中非结构化日志、嵌套JSON、时序传感器数据占比突破68%,旧版基于LazyFrame单通道…...

5分钟解锁网盘直链下载:告别限速,拥抱满速自由

5分钟解锁网盘直链下载:告别限速,拥抱满速自由 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 还在为网盘下载速度而烦恼吗?你是否经历过下载一个几GB的文件…...

告别手动记录!用CAPL脚本的file系列函数自动生成CANoe测试报告

告别手动记录!用CAPL脚本的file系列函数自动生成CANoe测试报告 在汽车电子测试领域,工程师们每天都要面对海量的测试数据——从总线负载率到错误帧统计,从信号值波动到时间戳记录。传统的手动截图、复制粘贴方式不仅效率低下,还容…...

GLM-4-9B-Chat-1M惊艳效果:复杂SQL代码库跨文件依赖关系可视化

GLM-4-9B-Chat-1M惊艳效果:复杂SQL代码库跨文件依赖关系可视化 1. 项目背景与核心价值 当你面对一个包含数百个SQL文件的大型数据仓库项目时,最头疼的问题是什么?我相信很多开发者和数据工程师都会说:理不清的表依赖关系。 传统…...

从LAS文件到点云地图:手把手教你用LIO-SAM处理武大WHU-TLS隧道数据集

从LAS文件到点云地图:LIO-SAM处理WHU-TLS隧道数据集的实战指南 隧道场景的点云数据处理一直是SLAM领域的技术难点。武汉大学发布的WHU-TLS Tunnel数据集作为全球最大的地面激光扫描基准数据集之一,其隧道环境数据具有典型的封闭空间特征——长条形结构、…...

华中科大大突破:让AI拥有“空间感“,从此告别“方向感缺失症“

这项由华中科技大学和百度公司联合开展的研究发表于2026年3月,论文编号为arXiv:2603.19235v1,研究团队提出了一个名为VEGA-3D(VideoExtracted Generative Awareness)的创新框架。有兴趣深入了解的读者可以通过该论文编号查询完整论…...

解决跨平台资源下载难题:res-downloader高效资源获取工具全解析

解决跨平台资源下载难题:res-downloader高效资源获取工具全解析 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gi…...

Adafruit MAX44009库详解:超低功耗环境光传感器驱动与工程实践

1. 项目概述Adafruit MAX44009 库是专为 Analog Devices(原 Maxim Integrated)推出的 MAX44009 环境光传感器设计的 Arduino 兼容驱动库。该库封装了 IC 通信、寄存器配置、自动量程切换、中断管理及光照度(lux)换算等底层逻辑&am…...

微信读书助手wereader:革新数字阅读体验的全方位解决方案

微信读书助手wereader:革新数字阅读体验的全方位解决方案 【免费下载链接】wereader 一个功能全面的微信读书笔记助手 wereader 项目地址: https://gitcode.com/gh_mirrors/we/wereader 在信息爆炸的时代,如何高效管理数字阅读内容、系统化整理读…...