记一次 .NET 某智能视觉软件 句柄爆高分析
一:背景
1. 讲故事
前几天高级调试训练营里的一位学员找到我,说他们的程序句柄爆高,经过自己分析之后发现是几百万的 process 句柄,截图如下:

说实话,第一眼看到有这么多的 process 句柄还是挺震惊的,在我的400+dump分析之旅中还是从未见过,这也给了我很大的好奇心,接下来我们就来分析下到底是何方神圣导致的问题。
二:WinDbg 分析
1. process 句柄真的爆高吗
dump分析的一个重要原则就是相信数据而不是人言,即使是我的学员。。。所以我让学员用 procdump 给我抓一个 minidump,我要亲自用 !handle 洞察 process 句柄个数,参考命令如下:
0:000> !handle
...
Handle 000000000000c398
Type Process
Handle 000000000000c39c
Type Process
Handle 000000000000c3a0
Type Process
Handle 000000000000c3a4
Type Process
Handle 000000000000c3a8
Type Process
Handle 000000000000c3ac
Type Process
Handle 000000000000c3b0
Type Process
Handle 000000000000c3b4
Type Process
Handle 000000000000c3b8
Type Process
Handle 000000000000c3bc
...
由于process句柄太多,没法全部刷出来,不过从满篇的Process来看,确实是这样,接下来的问题是如何知道 process 句柄是谁创建的?
2. Process 句柄是谁创建的
哈哈,学员就是学员,精髓都学到了,知道这种问题应该用什么工具,对,就是 perfview,学员用 perfview 追踪了 3分钟多,有些人可能要问,这个时间是怎么看出来的,可以打开 TraceInfo 选项就知道了,截图如下:

有了 etl 文件之后,打开 Windows Handle Ref Count Stacks 选项卡,可以看到 3分多时间内 追踪到了 5756 个句柄,截图如下:

接下来就是双击 Handle Type Process 行,展开这 5756 个句柄详情,然后多次点击具体的句柄观察特征,结果发现大量的 process 的上游都挂了 halcon 的 ReadImage() 方法,截图如下:

从调用栈来看,ReadImage() 会涉及到文件IO,所以在内核层自然会和文件系统驱动 fltmgr.sys 打交道,但在调用栈的末端被一个 dcfafilter.sys 驱动给拦截了,从名字上来看不像是windows自带的,而且也正是它创建的 process 句柄,类似 OpenProcess 操作。
到这里我的疑心越来越重,让朋友到 C:\Windows\System32\drivers 目录中看下这个驱动是干什么的?是哪个程序引用着这个驱动。可以用类似的命令查看。
sc queryex type= driver
sc qc DCFAFilter
经过朋友的一顿猛如虎的操作,终于给找到了,原来是 ManageEngine Unified Endpoint Security - Agent 服务,截图如下;

拿着这个信息到网上一搜,我去,还真是第三方的运维监控软件,截图如下:

到这里就真相大白了,然来是 ManageEngine 捣的鬼。。。无语了。。。朋友关闭了这个服务之后,句柄恢复了正常,截图如下;

三:总结
我见过太多的安全软件导致程序出现各种故障,但那些都是在用户态层面进行的干扰,而这次生产故障是我第一次见到有安全软件在内核态干扰应用程序,长见识啦!
记一次 .NET 某智能视觉软件 句柄爆高分析的更多相关文章
- 记一次 .NET 某工控软件 内存泄露分析
一:背景 1.讲故事 上个月 .NET调试训练营 里的一位老朋友给我发了一个 8G 的dump文件,说他的程序内存泄露了,一时也没找出来是哪里的问题,让我帮忙看下到底是怎么回事,毕竟有了一些调试功底也 ...
- 记一次 .NET 某医保平台 CPU 爆高分析
一:背景 1. 讲故事 一直在追这个系列的朋友应该能感受到,我给这个行业中无数的陌生人分析过各种dump,终于在上周有位老同学找到我,还是个大妹子,必须有求必应 . 妹子公司的系统最近在某次升级之后, ...
- 记一次 .NET游戏站程序的 CPU 爆高分析
一:背景 1. 讲故事 上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图: 又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的. ...
- 记一次 .NET 某医院HIS系统 CPU爆高分析
一:背景 1. 讲故事 前几天有位朋友加 wx 抱怨他的程序在高峰期总是莫名其妙的cpu爆高,求助如何分析? 和这位朋友沟通下来,据说这问题困扰了他们几年,还请了微软的工程师过来解决,无疾而终,应该还 ...
- 记一次 .NET 某旅行社Web站 CPU爆高分析
一:背景 1. 讲故事 前几天有位朋友wx求助,它的程序内存经常飙升,cpu 偶尔飙升,没找到原因,希望帮忙看一下. 可惜发过来的 dump 只有区区2G,能在这里面找到内存泄漏那真有两把刷子..., ...
- 记一次 .NET 某流媒体独角兽 API 句柄泄漏分析
一:背景 1. 讲故事 上上周有位朋友找到我,说他的程序CPU和句柄都在不断的增长,无回头趋势,查了好些天也没什么进展,特加wx寻求帮助,截图如下: 看的出来这位朋友也是非常郁闷,出问题还出两个,气人 ...
- 记一次 .NET 某电商交易平台Web站 CPU爆高分析
一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...
- 智能电视软件安装(WIFI上网)
智能电视软件上网(电视可连接无线网的称之为:智能电视) 1.安装当贝市场 链接:http://www.dangbei.com/ 2.安装电视家浏览器 链接:http://www.tvapk.net/f ...
- 【DSP开发】【计算机视觉】TI 视觉软件开发套件ADAS
关键字:TI 视觉软件开发套件 ADAS 日前,德州仪器 (TI) 宣布推出其视觉软件开发套件(SDK),从而为开发人员提供了一款灵活的框架.一组丰富齐全的硬件设备驱动程序和一套适用的开发工具,可 ...
- 新一代视频AI服务 —— 阿里云智能视觉重磅发布
3月27日下午,第51期阿里云产品发布会-智能视觉产品隆重发布,本次产品发布会首次面向全网用户深入的解读了智能视觉的前世今生. 行业背景 随着人工智能的技术不断成熟,AI逐渐在各行业内落地.在新零售领 ...
随机推荐
- 智能点餐助手平台:CodeBuddy模型驱动的技术革新
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 引言 在当代互联网技术高速发展 ...
- 解决ssh连接docker容器环境变量无效的问题
问题缘由: 因在docker容器中的linux系统输入nvcc 等命令都是有效的,但通过ssh连接到docker容器内,就存在该命令未找到等问题,查询资料得知,这是因为通过ssh连接docker容器后 ...
- Web前端入门第 57 问:JavaScript 数据类型与类型转换
在程序语言中,数据类型是基础,一切程序都是建立在基础数据之上. 如果说程序如同万丈高楼平地起,那么数据类型就像沙.石.钢筋.水泥等等最基础的原料.一样的高楼,不同的人,用相同的原料,造的方法也会有千般 ...
- Java 实现微信小程序不同人员生成不同小程序码并追踪扫码来源
Java后台实现微信小程序不同人员生成不同小程序码并追踪扫码来源 下面我将详细介绍如何使用Java后台实现这一功能. 一.整体架构设计 前端:微信小程序 后端:Java (Spring Boot) 数 ...
- 曾经风光无限的 Oracle DBA 已经落伍了吗?
先讲一个残酷的事实,Oracle DBA,若仍停留在纯粹的运维方向,未来的路将会越走越窄,尤其是在国内的特殊环境下,可以说是前途渺茫,举步维艰. 既然如此,那Oracle DBA们应该如何破局呢? P ...
- MySQL 主从延迟导致业务数据不一致
场景: 写入一条优惠劵数据,然后将该优惠劵信息读取出来同步给下游数据 现象: 本地写入优惠劵数据成功,同步信息成功.上周同步数据代码正常,周末改了发送优惠劵的信息,然后周一来了发现同步数据无法同步. ...
- 鸿蒙Next仓颉语言开发实战教程:消息列表
大家好,今天要分享的是仓颉语言开发商城应用实战教程的消息列表页面. 这个页面的导航栏和之前有所不同,不过难度并没有增加,只是标题移到了左边,我们使用两端对齐方式就能实现,导航栏部分的具体代码如下: R ...
- 干货|三个维度详解 Taier 本地调试原理和实践
在平时和开发者们交流的过程中,发现许多开发朋友尤其是新入门 Taier 的开发者,对于本地调试都有着诸多的不理解和问题.本文就大家平时问的最多的三个问题,服务编译,配置&本地运行,如何在 Ta ...
- 一文读懂:开源大数据调度系统Taier1.2版本新增的「工作流」到底是什么?
一.什么是工作流? 在阐述什么是工作流之前,先说一下工作流和普通任务的区别,在于依赖视图. 普通任务本身他只会有自己的dag图,依赖视图是无边界的,不可控的,而工作流则是把整个工作流都展示出来,是有边 ...
- 翻译 | 阿里巴巴的Dapr实践与探索
本文原文来自Dapr Blog,作者阿里云高级技术专家敖小剑.本文是我根据自己的理解翻译了其中的一部分并加了一些参考文献中的内容,所以并非完整翻译,点击此处即可阅读原版英文全文. 1 关于Dapr D ...