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

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

Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -24 EMFILE too many open files

后来将这个 asp.net 站点部署到 Windows 服务器的 IIS 上。运行一段时间后,发现其中一台服务器出现503错误,登上服务器一看,该站点的进程占用的内存竟然有1.2G,而同一负载均衡中另外一台正常的服务器内存占用只有40多M。然后看了一下进程中的线程数,惊呆了——竟然有8000多个线程!而另外一台正常的服务器只有20多个线程。

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

再后来内存增长到1.8G左右,线程数增长到1.3万左右,而且还在持续增长。

961593880d3fcccb6553d65be39e9e4e.png

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

6b4105bad79821e8169bf3cc726f2c29.png

强制结束进程后恢复正常,但运行一段时间(通常是1天时间)后又会出现同样的问题。非常奇怪!

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

windbg分析进程dump文件显示的线程情况:

0:000> .load C:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.0.1\sos.dll

0:000> !threads

ThreadCount: 8014

UnstartedThread: 0

BackgroundThread: 8013

PendingThread: 0

DeadThread: 0

Hosted Runtime: no

4d19ba678dcb2545e44bab8bba880784.png

发现大量线程中存在 coreclr!Thread::DoAppropriateWaitWorker 这个操作:

!uniqstack

# Child-SP RetAddr Call Site

00 00000056`ed5ad118 00007ffa`080e13ed ntdll!NtWaitForMultipleObjects+0xa

01 00000056`ed5ad120 00007ff9`f1dc885e KERNELBASE!WaitForMultipleObjectsEx+0xed

02 00000056`ed5ad400 00007ff9`f1dc8a0d coreclr!Thread::DoAppropriateWaitWorker+0xfe

03 00000056`ed5ad4b0 00007ff9`f1dca52f coreclr!Thread::DoAppropriateWait+0x7d

04 00000056`ed5ad530 00007ff9`f1e3b726 coreclr!CLREventBase::WaitEx+0x7f

05 00000056`ed5ad580 00007ff9`f1e3b636 coreclr!AwareLock::EnterEpilogHelper+0xca

06 00000056`ed5ad640 00007ff9`f1f92b18 coreclr!AwareLock::EnterEpilog+0x62

07 00000056`ed5ad6a0 00007ff9`f1f92131 coreclr!AwareLock::Contention+0x258

08 00000056`ed5ad760 00007ff9`92388e2b coreclr!JITutil_MonContention+0xb1

该问题还在进一步排查中。。。

原文:http://www.cnblogs.com/dudu/p/6127374.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python种颜色循环_Python 实现一个颜色色值转换的小工具

需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果&#x…

bugly中批量隐藏版本

App项目使用Bugly的内测分发功能进行整包的测试,但日积月累之后,版本就会特别多。而线上同时跑的版本可能不过三个左右,那么多版本会干扰到查看崩溃、选择版本,如何隐藏呢? 右上角,更多 –> 产品设置 –…

检查点(Checkpoint)过程如何处理未提交的事务

每次我讲解SQL Server之前,我都会先简单谈下当我们执行查询时,在SQL Server内部发生了什么。执行一个SELECT语句非常简单,但是执行DML语句更加复杂,因为SQL Server要修改内存中的相关页,并在事务日志里记录整个事务。 …

axure如何导出原件_axure导出_axure怎么导出流程图

摘要 腾兴网为您分享:axure怎么导出流程图,随身行,轻轻家教,钱宝宝,美甲帮等软件知识,以及winrar美化版,九秀直播软件,中医养生平台,酚酞瓜,4399dm,移动硬盘检…

机器学习工作坊 - 计算机视觉

点击上方蓝字关注我们(本文阅读时间:2分钟)活动介绍四月的 MS Learn 学堂,我们将进入机器学习专题。 本月三期 MS Learn 学堂,我们会以工作坊的形式,结合具体应用实例,带领大家实践计算机视觉、…

React Native之提示Unable to load script from assets ‘index.android.bundle

1 问题 Unable to load script from assets index.android.bundle. Make sure your bundle is packaged correctly or youre running a packager server. 2 分析 在android的assets目录下面,没有找到index.android.bundle文件 2 解决办法 1) 在app/src/main目录下新建assets…

SQL分组处理气象数据及注意事项

问题:从全国所有气象站点数据气候数据表中(温度,降水量,风速等)找出研究区气象站点及所需气象信息。 解决: select 台站号 as 台站号,年 as 年,降水量 as 降水量,平均气温 as 年均温 from 站点气候年数据 …

服务器硬盘如何验收,系列服务器及存储测试安装验收报告.doc

系列服务器及存储测试安装验收报告p系列UNIX服务器测试安装说明1.测试p系列UNIX服务器系统开关机及系统启动测试目的:系统操作系统是否安装完好,主机能否正常开关机。测试方法:用正常关机手段关闭主机(# shutdown),然后…

arcgis server 无法手动删除切片

背景 问题 场景如下: 切片放置在专门的文件服务器上,通过unc共享路径对外共享。文件服务器的OS为windows server2008R2想手动更新切片服务的切片。发现同一切片服务,有的比例级别文件夹可以删除或者重命名。有的比例级别不可以。不能删除的比…

风变编程python离线版_如何看待风变编程的Python网课

第一次接触Python,其实就是朋友一句话,听说派森挺厉害的,时间大概是两个月前,当时网上搜了下,噢,英文叫Python,一种编程语言,然后就没有然后了... 最近朋友圈偶尔发现有个Python小课…

千寻和省cors精度对比_为什么使用千寻cors服务?它有什么优势?

过去20年,黑白屏手机升级成为智能手机、多数绿皮火车升级成了高铁、数控机床替代了大部分切割工人……科技创新正推动各行业向着便捷、高效、低成本的方向变革。技术升级为商业变革提供巨大动力,商业应用验证技术发展方向。高精度定位将成为公共服务在四…

python exception的传递

try: block except1: except2: ... 如果block中出现了except,那么会先取匹配except1,如果匹配了,进行处理,程序继续执行。 如果except1没有匹配上,那么继续匹配except2。 如果该层的try except都没有匹配到&#xff0c…

Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)

1. Hadoop 2.0 中的资源管理 http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/Hadoop 2.0指的是版本为Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop,内核主要由HDFS、MapReduce和YARN三个系统组成,其中,YARN是一…

React Native实现js调用安卓原生代码

1 问题 实现js调用安卓原始代码,直接上代码,简单粗暴 2 代码实现 1) 实现一个继承ReactContextBaseJavaModule的类,MyToastModule.java文件如下 public class MyToastModule extends ReactContextBaseJavaModule {public MyToastModule(ReactApplicationContext reactContext)…

Matlab三种归一化方法

归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。归一化有同一、统一和合一的意思。无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)…

发布nuget包的正确姿势---cicd自动打包发布

最轻便的发布nuget包方式,方便cicd自动打包发布nuget包首先新建项目项目名随便取,这里就叫它GuiH.ClassLibrary默认即可,需要改目标版本时,等创建好再改项目创建好了随便写个接口方法namespace GuiH.ClassLibrary {public class C…

我的世界服务器物品属性,属性 - Minecraft Wiki,最详细的官方我的世界百科

属性(Attributes)是生物和玩家身上的增益/减益特性系统。属性也存在修饰符(Modifiers)中,用于调整属性的强度。属性应用[]当应用到一个物品,一个物品的修饰符将增加或减少以修正相应的属性下面的命令将给最近的玩家一把增加20( 10)点额外伤害的钻石剑&a…

正则表达式(括号)、[中括号]、{大括号}的区别

正则表达式的() [] {}有不同的意思。 () 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。 (\s*)表示连续空格的字符串。 []是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。 (0-9) 匹配 0-9′ 本…

分布式和微服务区别_深度解析spring cloud分布式微服务的实现

分布式系统微服务就是原来臃肿的项目拆分为多个模块互不关联。如:按照子服务拆分、数据库、接口,依次往下就更加细粒度,当然运维也就越来越难受了。分布式则是偏向与机器将诺大的系统划分为多个模块部署在不同服务器上。微服务和分布式就是作…