一次内存泄露排查

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

排查过程

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();
        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS Cartographer--Algorithm

ROS Cartographer–Algorithm 原文:Algorithm walkthrough for tuning 论文地址(Google Search):Real-Time Loop Closure in 2D LIDAR SLAM ROS Cartographer的完整参考文件:Cartographer ROS Integration 概述 本地SLAM通常由前端和后端…

比肩ChatGPT的国产AI:文心一言——有话说

🔗 运行环境:chatGPT,文心一言 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好&am…

【云原生|Docker】06-dokcerfile详解

目录 前言 Dockerfile基础示例 Dockerfile简介 1. Dockerfile概念 2. Dokcer镜像分层理解 ​3. Doker build构建原理 Dockerfile参数解析 1. Dokcerfile组成 2. 指令说明 2.1 FROM引入基础镜像 2.2 LABEL 2.3 ENV 2.4 RUN 2.5 COPY 2.6 ADD 2…

初识操作系统

目录 1.操作系统是什么 2.为什么要有操作系统 3.操作系统的相关关系 1.驱动程序 2.系统调用接口 3.用户调用接口 4.用户程序 4.用具体的例子理解操作系统 1.操作系统是什么 (1)操作系统是一组管理计算机硬件与软件资源的计算机软件程序 。 (…

Linux进程概念—环境变量

Linux进程概念—环境变量1.孤儿进程2.环境变量2.1常见环境变量2.2查看环境变量方法2.3在环境变量中添加2.4和环境变量相关的命令2.5环境变量的组织方式2.6命令行参数🌟🌟hello,各位读者大大们你们好呀🌟🌟 &#x1f68…

【Spring事物三千问】TransactionSynchronizationManager的原理分析

TransactionSynchronizationManager TransactionSynchronizationManager 是管理每个线程的DB连接资源和事务同步的核心委托类。 如果事务同步未处于活动状态,则表示当前没有事务,或者事务管理器不支持事务同步。 TransactionSynchronizationManager 中…

力扣-行程和用户

大家好,我是空空star,本篇带大家了解一道困难难度(实际很简单)的力扣sql练习题。 文章目录前言一、题目:262. 行程和用户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行…

Proteus8.15安装包下载及安装教程

[软件大小]: 643 MB [安装环境]: Win11/Win 10 [软件安装包下载]: https://pan.quark.cn/s/dcacfc0d3e41 Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产…

【Python】在python中使用MySQL

文章目录0 前言1 参考链接2 数据库概述3 MySQL配置3.1 下载及安装3.2 环境配置3.3 基本使用3.4 问题解决3.4.1 如何重置密码3.4.2 如何重置服务名称4 SQL语句4.1 一些关键点 【*时时更新*】5 在python中使用MySQL0 前言 最近接了一个小项目,需要使用数据库来处理后台…

代码随想录【Day42】动态规划 | 背包问题、416. 分割等和子集

背包问题概述 01背包理论基础 确定dp数组以及下标的含义 对于背包问题,有一种写法, 是使用二维数组,即dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 确定递推公式 不放物品i&…

人工智能交互系统界面设计(Tkinter界面设计)

文章目录前言一、项目介绍二、项目准备三、项目实施1.导入相关库文件2.人脸信息验证功能3.语音交互与TCP数据通信4.数据信息可视化四、相关附件前言 在现代信息化时代,图形化用户界面(Graphical User Interface, GUI)已经成为各种软件应用和…

docker本地私有仓库搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载和安装registry镜像1.下载2.安装配置二、使用私有仓库1.配置内网环境2.配置json安全3.将docker镜像推入私服库总结前言 和Maven的管理一样,…

数据分析学习项目:东京奥运会跳水评论分析

“中国跳水梦之队” ————有关东京奥运会跳水评论分析 导语 第32届夏季奥林匹克运动会于2021年07月23日-2021年08月08日在日本东京举办。 四年一届的奥运会可以说是世界瞩目的盛会,奥运健儿们在赛场上的精神风貌不只是代表了他们自身的运动精神,更昭…

python玄阶斗技--tkinter库

目录 一.tkinter库介绍 二.功能实现 1.窗口创建 2.Button 按钮 3.Entry 文本输入域 4.text 文本框 5.Listbox 多选下拉框 6.Radiobutton 多选项按钮 7.Checkbutton 多选按钮 8.Scale 滑块(拉动条) 9.Scroolbar 滚动条 10.Menu 菜单栏 11. messagebox 消息框 12…

ChatGPT原理解析

文章目录Transformer模型结构构成组件整体流程GPT预训练微调模型GPT2GPT3局限性GPT4相关论文Transformer Transformer,这是一种仅依赖于注意力机制而不使用循环或卷积的简单模型,它简单而有效,并且在性能方面表现出色。 在时序模型中&#…

广州蓝景分享—如何结合人工智能学习前端开发

前言 今天蓝景技术团队将要和大家探讨一个话题:如何借助人工智能辅助前端学习。实际上,这个主题也可以被描述为“如何正确看待人工智能”、“如何更好地使用人工智能”等等。2023年是人工智能元年,GPT模型的迭代使全世界为之关注和震撼。甚至…

铁威马NAS教程之利用docker快速搭建个人在线书库

这是一个基于Calibre的简单的图书管理系统,支持在线阅读。主要特点是:美观的界面、支持多用户、支持在线阅读、支持邮件推送、支持OPDS、支持一键安装,网页版初始化配置,轻松启动网站等等。 那么,如何利用docker快速搭…

高规格国赛接棒AidLux AI应用竞赛,AidLux邀你来报名赢大奖!

近年来,高等教育领域紧跟人才需求的变化,开设了人工智能、集成电路、大数据、智能物联网等一系列AI相关专业。 但根据就业招聘数据来看,这类与AI产业链直接相关的专业岗位,在就业市场上的绝对占比还相对有限。企业更多的需求&…

【百面成神】java web基础7问,你能坚持到第几问

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:纯手打总结面试题,自用备用 🌰 文章简介:java web最基础、重要的8道面试题 文章目…

java HashMap 源码分析(深度讲解)

目录 一、前言 二、HashMap简介 三、HashMap的底层实现 四、HashMap的源码解读(断点调试) 0.准备工作 : 1.向集合中添加第一个元素 : ①跳入无参构造。 ②跳入put方法。 ③跳入putVal方法。 ④跳入resize方法。 ⑤回到putVal方法。…
最新文章