一个 asp.net core 站点,之前运行在 linux 服务器上,运行一段时间后有时站点会挂掉,有一次的症状是 asp.net core站点在高并发下出现的“EMFILE too many open files”问题 。

昨天将该站点升级至 .net core 1.1(之前用的是 .net core 1.1 preview1)并部署到 windows 服务器的 IIS 上,在同一个负载均衡下部署了2台服务器。

今天早上发现其中一台服务器出现503错误,登上服务器一看,该站点的进程内存占用竟然有1.2G,而同一负载均衡中另外一台正常的服务器内存占用只有40多M。然后看了一下进程中的线程数,惊呆了——竟然有8000多个线程!而另外一台正常的服务器只有20多个线程。

接着将这台服务器从负载均衡上摘下来,这时出现了更加让人惊呆的现象——在没有请求的情况下,这个 asp.net core 站点进程的内存占用与线程数一直在增长。就像在代码中写了一个死循环,在循环中不停地创建线程。

9:30左右是1.2G内存8000多个线程,到了11:09左右内存增长到1.8G,线程数增长到1.3万,而且还在持续增长。

不仅内存与线程数在增长,而且CPU也一直在波动,这可是在没有任何请求的情况下,谁在偷偷地干活?

从目前分析的情况看,罪魁祸首可能是 EnyimMemcachedCore (支持.net core的memcached客户端,是我们从 EnyimMemcached 移植过来的),EnyimMemcachedCore 用到了 Socket 池,问题可能出在 Socket 池部分,源代码在 github 上(EnyimMemcachedCore源代码)。

目前不知道从何处下手排查这个问题,很期待您的高见。

linux线程一直在增加,在.net core中遇到的奇怪问题:内存与线程数一直增长相关推荐

  1. 一文读懂 | Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

    点击蓝字 关注我们 因公众号更改推送规则,请点"在看"并加"星标"第一时间获取精彩技术分享 来源于网络,侵删 栈是什么?栈有什么作用? 首先,栈 (stack) ...

  2. Linux中的各种栈:进程栈 线程栈 内核栈 中断栈

    Linux中的各种栈:进程栈 线程栈 内核栈 中断栈 栈的作用 1. 函数调用 2. 多任务支持 Linux 中有几种栈?各种栈的内存位置? 1. 进程栈 2. 线程栈 3. 进程内核栈 4. 中断栈 ...

  3. Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

    栈是什么?栈有什么作用? 首先,栈 (stack) 是一种串列形式的 数据结构.这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 ...

  4. Linux系统中消息队列,共享内存、信号和线程的基本操作使用方法

    Linux系统中消息队列,共享内存.信号和线程高级操作 第十一章 消息队列 10.1消息队列定义 10.2 消息队列特点 10.3 key值 10.4 创建消息队列 10.4.1 发送消息 10.4. ...

  5. Linux服务器的最大内存和CPU数

    从网上查了很多资料.总算把linux下的内存和cpu个数搞清楚了.个人觉得使用linux系统的朋友都应该了解下.先公布如下,如有错误,请反馈给我.谢谢!! Linux系统/服务器能够支持的最大内存和C ...

  6. 服务器线程数一直增加,.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长...

    一个 asp.net core 站点,之前运行在Linux 服务器上,运行一段时间后有时站点会挂掉,在日志中记录很多"EMFILE too many open files"的错误: ...

  7. Linux下程序崩溃dump时的 core文件的使用方法

    Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...

  8. 在linux的weblogic上增加启动参数

    如何在linux的weblogic上增加启动参数 在windows的myeclipse非常简单,就是 window-preference-myclipse-application server-web ...

  9. Linux系统编程----12(线程概念,Linux线程实现原理,栈中ebp指针和ebp指针,线程的优缺点和共享资源)

    线程概念 什么是线程 在一个程序里的一个执行路线就叫做线程(thread). 更准确的定义是:线程是"一个进程内部的控制序列" 一切进程至少都有一个执行线程 线程在进程内部运行,本 ...

最新文章

  1. 规范化制度保障安擎高品质产品
  2. WWDC2018总结
  3. Hibernate HQL基础 投影查询
  4. mysql 白皮书_mysql企业版 《 MySQL企业版中文白皮书 》.cn.doc
  5. 深度学习训练模型中的 train from scrath 是什么意思?(247)
  6. 电脑壁纸励志_励志文案丨关于学习的文案,大家加油!
  7. verilog实现伺服电机控制
  8. 产品专家Marty Cagan:不做仅仅会编码的人
  9. 05Struts2表单
  10. boost asio异步通信
  11. Linux下计算进程的CPU占用和内存占用的编程方法[转]
  12. 26.go test
  13. 基于模拟退火算法解决TSP问题 | MATLAB源码
  14. NOIP模拟赛 czy的后宫5
  15. 用JAVA实现简单点餐系统
  16. 金山云CDN:国内最佳付费CDN
  17. (转)A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
  18. 简单几步实现内网穿透
  19. 赞!原来还有这些免费图片下载网站(内附部分爬虫代码)
  20. HTML+CSS实现渐变色标签,鼠标经过效果

热门文章

  1. 嵌入式新人发展的总体方向
  2. FreeRTOS 查询任务 剩余的栈空间的 方法
  3. STM32启动模式详解
  4. upc组队赛1 小C的数学问题【单调栈】(POJ2796)
  5. 在2019年,如何成为更好的Node.js开发者?
  6. CRT exCRT模板
  7. 南安出台行动方案推进智慧城市建设
  8. RAID重组和数据库数据的修复与验证
  9. MYSQL查看 table 表状态常用的命令
  10. 如何在ASP.NET中用OWC绘制图表