一次内存泄露排查
创始人
2025-06-01 16:12:52
0

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

排查过程

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 49461

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

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

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

相关内容

热门资讯

深圳海关“政策+科技”双支撑 ... 当前,全球贸易形势复杂多变,作为外贸大省的重要窗口,深圳海关积极作为,以智慧监管为抓手,以精准服务为...
京东外卖将扩招至15万名全职骑... |2025年6月3日 星期二| NO.1京东外卖:近期将扩招至15万名全职骑手 6月1日,京东外卖宣...
免关税政策即将到期 欧盟将与乌... 欧盟委员会发言人奥洛夫·吉尔2日表示,欧盟当前针对乌克兰的免关税政策将于6月5日到期,欧盟正在着手制...
鲍威尔出席美联储国际金融司活动... 美联储主席鲍威尔(Jerome Powell)周一在美联储国际金融司(IF)成立75周年活动上发表讲...
关税政策推进受阻,特朗普政府求... 6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法”的命令...
关税政策推进受阻 特朗普政府求... 当地时间6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法...
英国央行Catherine M... 英国央行Catherine Mann:必须考虑量化紧缩(QT)和一系列利率政策的影响。
原创 香... 在新加坡香格里拉酒店举行的亚太安全论坛上,美国国防部长赫格塞思(Lloyd Austin)于5月31...
美方掐断C919发动机技术,中... 在国际舞台上,当两大经济体相遇,总会引发一场关于技术、资本和市场的角力。最近,中美之间的博弈又一次走...
6800万镑!埃泽“豪言”震惊... 足坛风云变幻,总有那么些球员,他们的名字与豪门绯闻紧密相连,每一次表态都能在转会市场上掀起波澜。这不...