在最近项目开发过程中,在进行任务调度处理过程中,出现了一个问题,它的线程数暴长,从20多个可以到1000多个,如果你的服务器性能好的话,可以到10000多个,太恐怖了,就算你的服务再好,早晚有一天也会被new Redis炸干!哈哈!

原因:非托管资源使用过多,没有得到释放

一 连接网络资源过多,如redis,mongo,sql等

二 原生的数据库对象创建过多(自己没有连接池,现在的linq没这问题)

三 文件资源使用过多,没有得到释放

解决方法:

使用单例模式减少new操作的次数

对于我们应用程序的线程,如果它持续增长,那么,你就要看一下那么非托管资源是否被释放了,这个要重视起来。

有人说这个文章是个标题党,不知道从哪里发明的这个“新名词”,所以我把代码也发一下吧

/// <summary>
/// Redis客户端
/// </summary>
public class RedisClient : IDisposable
{
public static RedisClient Instance;
private ConnectionMultiplexer conn;
private IDatabase cache;
Private static Object lockObj=new Object();
#region Constructors
static RedisClient()
{
lock(lockObj)
{
Instance = new RedisClient();
}
}
private RedisClient()
{
conn = ConnectionMultiplexer.Connect("localhost"); //var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");
cache = conn.GetDatabase();
}
#endregion #region Behaviors
public void Push(string key, object value)
{
cache.Push(key, value);
} public object Pop(string key)
{
return cache.Pop(key);
} public T Pop<T>(string key)
{
return cache.Pop<T>(key);
} public T Get<T>(string key)
{
return cache.Get<T>(key);
} public object Get(string key)
{
return cache.Get(key);
} public void Set(string key, object value)
{
cache.Set(key, value);
}
#endregion #region IDisposable
public void Dispose()
{
conn.Dispose();
}
#endregion }

线程暴长~Quartz中创建Redis频繁后导致线程暴长的更多相关文章

  1. 在kubernetes集群中创建redis主从多实例

    分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...

  2. java main()线程是不是最后一个退出的(相比较main中创建的其他多个线程)

    JVM会在所有的非守护线程(用户线程)执行完毕后退出: main线程是用户线程: 仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程. pu ...

  3. ios 单一线程中的Runloop机制会导致线程安全问题吗?

    今天在处理多线程突然想到一个问题,多核处理器会不会导致,单一线程中,由runloop分发的2个函数同时执行呢?进而同时修改同一个变量,产生bug? 我做了以下的测试: - (void)viewDidL ...

  4. 【小技巧】Eclipse 中创建Maven项目后没有WEB-INF文件夹以及web.xml文件

    懒得截图了,一张图配下面步骤搞定. 1.右键项目,选择propertities后选择图中①(被遮住了): 2.先不②勾选去掉,点击Apply:然后在把②处勾选上.此时④位置会出现东东,点击蓝色超链接. ...

  5. IDEA中创建maven项目后解决main文件夹下目录不全的问题

    IDEA创建maven-archetype-webapp项目的时候,创建完成后发现在main文件夹下没有java,resource等源文件夹. 解决方法: 1.选择File->Project S ...

  6. ie7中position:fixed定位后导致margin:0 auto;无效

    布局网页时,需要把header固定在上方.直接使用position:fixed;现代浏览器以及ie8以上均正常显示,但是ie7中,header里面的子元素设置的水平居中并没有效果.做了各种尝试,都没有 ...

  7. Android—Socket中关闭IO流后导致Socket关闭不能再收发数据的解决办法

    以Socket发送数据为例: 发送数据时候要声明:DataOutputStream os = new DataOutputStream(socket.getOutputStream()); 最近开发遇 ...

  8. (C#- 多线程) 在线程中创建object,共享问题。

    研究如下问题: 1. 在一个进程的主线程中创建一个Object,其他线程都可以访问这个Object,并操作Object的方法. - 多线程同步问题. 2. 在一个进程的多个线程里面,每个线程都创建同一 ...

  9. Quartz中文文档使用

    Quartz中文使用说明文档,内容相当详细,有需要的码友们可以看看!! 好东西要分享!! 下面是文档的内容目录,附上下载的地址:点击打开链接,下载文档 中文版目录总汇及内容提要 第一章. 企业应用中的 ...

随机推荐

  1. Java中hashcode,equals和==

    hashcode方法返回该对象的哈希码值. hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过has ...

  2. ZOJ 2587 Unique Attack (最小割唯一性)

    题意 判断一个无向图的割是否唯一 思路 错误思路:一开始想的是判断割边是否都是关键割边,那既然割边两端点能连通S.T点的边是关键边,那么只要遇到有某个边两端点不连通S or T则这条边就不是关键割边( ...

  3. I.MX6 默认打开 USB adb

    /***************************************************************************** * I.MX6 默认打开 USB adb ...

  4. AngularJS promise()

    实例说明一 <!DOCTYPE html> <html ng-app="my-app"> <head> <meta charset=&qu ...

  5. 如何借助于UML完成我们对系统的设计?谈谈我的理解

    首先要说的是我对面向对象的理解,以及设计类的依据: http://www.cnblogs.com/xinchrome/p/4904931.html 理解了这篇文章,也就理解了现在要说的. 在面向对象编 ...

  6. 【编程之美】计算1-N中含1的个数

    转自:点我  1位数的情况: 在解法二中已经分析过,大于等于1的时候,有1个,小于1就没有. 2位数的情况: N=13,个位数出现的1的次数为2,分别为1和11,十位数出现1的次数为4,分别为10,1 ...

  7. ByteBuffer用法小结

    在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素 ...

  8. jquery加入购物车飞入的效果

    主要原理是:点击当前图片的时候,复制(克隆)当前图片在当前位置,然后利用jQuery的animate()方法实现图像的飞入效果 效果预览:http://runjs.cn/detail/qmf0mtm1 ...

  9. UI篇--布局问题

    1.android:layout_marginRight 不起作用解决方法 今天想在RelativeLayout的左右分别放上一个按钮, 左边按钮用marginLeft="10dp" ...

  10. 我喜欢的乐队-Euphoria

    来自日本的后摇乐团,001年冬天由森川裕之.佐藤昭太.木下阳辅三人于东京组建,2003年签约日本独立厂牌123Record,并发行首张EP细碟<Floral Dew>.包括EP.Singl ...