netty4虚拟内存不断飙升
去年升级过一个老的netty3的程序到netty4,近期突然注意到一个问题,就是这个程序随着时间虚拟内存会不断升高.之前升级的时候担心存在内存泄露,所以还特意用jstate跟踪过gc回收的情况,并没有异常.虽然当时也发觉内存占用有缓慢升高的趋势也没有特别在意,仅做观察处理.
由于同机器上还有另一个netty3的老项目可以做对比,所以发觉还是有异常,同时启动的程序虚拟内存占用是老项目的3倍,还没有停止的趋势.
决定还是排查一下,jstack 进程号 > 文件名 ,将堆栈信息dump出一份,观察堆栈信息发现:
"defaultEventExecutorGroup--2" prio=10 tid=0x0000000044191000 nid=0x1df0 waiting on condition [0x0000000043ada000]
java.lang.Thread.State: WAITING (parking)
存在大量以上信息.其中defaultEventExecutorGroup-5-2信息中5为线程组的id,2为线程组中的线程id.然后发现一个特点就是日志中有大量的不同线程组的defaultEventExecutorGroup出现.马上想到一种可能.翻看原始代码中defaultEventExecutorGroup的创建地点:
protected void initChannel(SocketChannel ch) throws Exception {
......
EventExecutorGroup excutor = new DefaultEventExecutorGroup(16);
channelHandler = getMessageConnectorHandler();
p.addLast(excutor,"messageConnectorHandler", channelHandler);
}
果然当时犯糊涂了,当时想着反正spring是单例,这种初始化方法也就调用一次,局部变量new出来也没什么..但是忘了一件重要的事情就是,这个方法所在的类根本就不是注入的,而是直接new出来的.所以这个局部的DefaultEventExecutorGroup对象每次都是重新创建,导致出现不同线程组的多个线程池出现.
将此线程池提升到静态的成员变量后问题解决:
private final static EventExecutorGroup excutor = new DefaultEventExecutorGroup(16);
netty4虚拟内存不断飙升的更多相关文章
- CPU飙升的问题
本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新.前几天测试小姐姐对网站进行压力测试,观察服务的CPU.内存.load.RT.QPS等各种指标. ...
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
问: linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 每个进程所拥有的4G独立的虚拟内存空间是什么意思?linux系统的虚拟4G空间中,高位的1G是用于系统内核运行的,那 ...
- win7系统c盘瘦身,去虚拟内存方式
电脑使用过程中,C盘出现个情况,c盘属性上的大小 > c盘内容加起来的大小 原因就是"虚拟内存"在作祟. 运行 powercfg -h off 关闭系统休眠,删除C盘 hi ...
- Mac Pro 8G 安装MyEclipse提示虚拟内存为0 安装失败
看的一个大神的博客,一句话解决了.哈哈 百度一下很多人都说开多一点程序,让程序占满内存,使其虚拟内存使用就能通过这一步骤,但这里有个更好一点的方案 通过执行: memory_pressure -l ...
- netty3升netty4一失眼成千古恨
老项目是netty3的,本来想直接改到netty5,但是netty5居然是只支持jdk1.7,很奇怪jdk1.6和jdk1.8都不行..为了兼容jdk1.6加上netty4本来和netty5就差别不大 ...
- Mac Pro 16G 安装MyEclipse提示虚拟内存(为0)不够
百度一下很多人都说开多一点程序,让程序占满内存,使其虚拟内存使用就能通过这一步骤,但这里有个更好一点的方案 通过执行: memory_pressure -l critical 用系统内存压力测试进程占 ...
- 基于Netty4的HttpServer和HttpClient的简单实现
Netty的主页:http://netty.io/index.html 使用的Netty的版本:netty-4.0.23.Final.tar.bz2 ‐ 15-Aug-2014 (Stable, Re ...
- Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据
Protobuf序列化的字节流数据是不能自描述的,当我们通过socket把数据发送到Client时,Client必须知道发送的是什么类型的数据,才能正确的反序列化它.这严重影响限制了C/S功能的实现, ...
- Redis教程(十一):虚拟内存介绍:
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/138.html 一.简介: 和大多NoSQL数据库一样,Redis同样遵循 ...
随机推荐
- NSPredicate 的使用
NSPredicate是什么? NSPredicate 是预测的意思 但是我们常翻译成谓词 它可以干什么? 使用NSPredicate可以定义模糊查询条件 根据一定的条件 我们就可以从一个数组中快速找 ...
- 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache
虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...
- C# 文件下载 : WebClient
最近更新了一个下载小工具,主要提升了下面几点: 1. 在一些分公司的局域网中,连接不上外网 2. 服务器上的文件更新后,下载到的还是更新前的文件 3. 没有下载进度提示 4. 不能终止下载 下面和大家 ...
- EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand:在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery ...
- siteMap与站点导航
ASP.NET 站点导航主要由与站点地图数据源通信的站点地图提供程序以及公开站点地图提供程序的功能的类构成.ASP.NET 站点导航使您能够将到您所有页面的链接存储在一个中心位置,并通过包含一个用于读 ...
- jquery easyui使用(一)······可折叠面板的布局,手风琴
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- 解决BUG:CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
vs 2015的项目用vs2013,更改.net版本之后,打开会报以下错误,原因是配置文件修改出了问题.已经验证是BUG 你只需要把Web.config换成以前的就好了. https://conn ...
- Java中,方法的重写、重载的区别,以及多态的实例
首先我们要明白什么是重写和重载 重写(override):子类方法覆盖了父类的方法. (类与类之间继承的关系) 例:父类代码 public class Deng { public void Qi ...
- Cats(1)- 从Free开始,Free cats
cats是scala的一个新的函数式编程工具库,其设计原理基本继承了scalaz:大家都是haskell typeclass的scala版实现.当然,cats在scalaz的基础上从实现细节.库组织结 ...
- hdu-2063-二分图最大匹配
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...