捉虫笔记(六)-谁把系统卡住了?

06-谁把系统卡住了?

1、现象

QA反馈,在软件退出的时候,会把整个系统卡住,将近40s。我第一反应这么离谱,我们的软件有这么大的“魅力”,将老大哥抖三抖。

我立马重现现场,果然如此。虽然没有QA卡住40s这么高,但是确实整个系统卡住了有4s。

2、分析过程

我在想软件在退出的时候,做了什么操作将系统的资源消耗殆尽,导致整个系统高热。

所谓的系统资源,无非这几种:cpu,memory,disk。

我手上没有源码,但是我有pdb文件,所以跑个profiler,抓住罪魁祸首不是难事。

2.1、CPU利用率分析

打开windows自带的profiler WPR(Windows Performance recorder),先将操作重新来一遍,录制数据,再利用WPA(Windows Performance Analyzer)进行性能分析。

接下来再看看进程此时的利用率,图中颜色较深的部分就是当前选中的进程,可以看出此时的CPU并不高,至少没有看到尖峰时刻。
在这里插入图片描述

在分析CPU利用的时候发现一个特列现象,请看这张图,在下面的这张图中RoboCopy的CPU利用率很高,导致我开心了几分钟,以为是找到了凶手。

但是当我采集几分数据并同时在QA系统采集了一次数据,对照发现这是个例现象,并不是真正的原因。
在这里插入图片描述

我在CPU这里辗转几个小时后,没有发现任何可疑之处。目标开始转向memory利用率。

2.2、memory使用率

从图中可以看出,整个系统的memory已经接近64G极限。

可以简单看出有可能是memory到了极限导致的。

但是仔细分析发现证据不是那么的有力。

第一个红色框中是进程存活期间cpu利用率,第二个是存活期间的memory。

我们看在红色框中的就是当时进程从开始到退出的内存数据。在进程还未起来之前整个系统的内存也已经捉襟见肘了,虽然在退出的时候有个波动(下面红色的2中),但是我觉得这个波动引起系统卡顿4s以上很牵强,没有说服力,而且这个波动持续时间见远远小于4s。
在这里插入图片描述

2.3、disk利用率

接下来看下disk的利用率,因为我知道的进程是2号disk上。所以只看2号disk的信息,发现这个利用率也很低。转了很久也未发现不对劲的地方。
在这里插入图片描述

接连几个的小时分析,都没有头绪,但是我知道肯定有蛛丝马迹我没有注意到。

2.4、再分析CPU利用率

我在想导致系统卡顿,肯定是资源出现了问题。

选中profiler中CPU选项卡中的一栏,按照cpu利用率分类显示。

我的系统是16个核,暂时的数据如此,但是这乱糟糟的没法看。其实我最想看的就是整个系统的CPU利用率是多少。

因为我猜测虽然退出的进程利用率不高,但是它可能是压死骆驼的最后一根稻草。
在这里插入图片描述

既然这个软件不能看到总体的CPU利用率,有个工具可以sysinternals process explorer 。

在红色框中可以看到CPU总体利用率。
在这里插入图片描述

我重新走了一遍流程,却发现一个很重要的线索。CPU的总体利用率并没有尖峰,但是我却意外的瞥见一个意外的进程WerFault.exe。

2.5、进程异常

熟悉windows系统都知道,在软件出错的时候往往会出现一个WerFault.exe进程报告错误的信息。类似下面的画面。
在这里插入图片描述

我的注意力立马被它吸引住了。难道是它让系统卡住了?

我接着对它进行了cpu,memory,disk进行了分析,也未发现有价值的信息。

但是我又多了个疑问,这个进程持续了几秒钟就退出了。为什么没有弹出UI。

我把Windbg拉起来,挂上去看看到底是哪里错误了。

拿出我写的小软件,启动进程自动挂载上去。
在这里插入图片描述

在软件退出的时确实有异常,但是从堆栈来看只知道和D3D有关。

 # Child-SP          RetAddr               Call Site
00 0000002d`ea5ff5a0 00007ffd`3529c1ef     software!software::D3D11Device<1,1>::Buffer
...
13 000000d1`f3fffa50 00007ffe`1771cc91     KERNEL32!BaseThreadInitThunk+0x14
14 000000d1`f3fffa80 00000000`00000000     ntdll!RtlUserThreadStart+0x21

从这里看的堆栈信息还不是很清晰,我们再用WPA来看。可以看到最后调用的dll是nvwgf2umx.dll
在这里插入图片描述

这个dll名字很奇怪。用工具搜索了下。从目录名字和文件属性来看是个amd显卡有关。
在这里插入图片描述

2.6、查看系统日志

在这里有个疑问就是WeFault.exe怎么没有界面呢。

那我该怎么调试,我刚开始就想到进入内核态调试。

一个应用层的问题,内核调试是不是有点夸张了。而且估计配置都可能需要半天时间。

突然想到这个WeFault.exe既然连UI都没有出现,会不会在系统中写下日志信息。

在菜单栏输入Eventvwr.msc,再选中windows Logs->Application

果然发现了蛛丝马迹。
在这里插入图片描述

但是这个信息太少了,接着把日志切换到system下。又发现个错误信息。
在这里插入图片描述
接着查询nvlddmkm这个文件,发现是个驱动文件,也是AMD的。
在这里插入图片描述

分析到这里,我有点明白了。

3、总结

在程序中调用了nvwgf2umx.dll调用到nvlddmkm.sys,驱动异常崩溃。然后驱动重启了,导致系统卡顿。

为什么WeFault.exe没有显示UI,因为驱动是在session 0会话中,而这个会话是没有UI显示的。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全之信息收集-实战-2

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 目录 7、网络空间引擎搜索 8、github源码泄露 9、端口信息 10、框架指纹识别 11、WAF识别 12、后台查找 7、网络空间引擎搜索 FOFA&#xff1a;https://fofa.info/ 360 …

51c自动驾驶~合集30

我自己的原文哦~ https://blog.51cto.com/whaosoft/12086789 #跨越微小陷阱&#xff0c;行动更加稳健 目前四足机器人的全球市场上&#xff0c;市场份额最大的是哪个国家的企业&#xff1f;A.美国 B.中国 C.其他 波士顿动力四足机器人 云深处 绝影X30 四足机器人 &#x1f…

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

一&#xff0c;数组翻转 1.概述:数组对称索引位置上的元素互换&#xff0c;最大值数组序号是数组长度减一 创建跳板temp&#xff0c;进行min和max的互换&#xff0c;然后min自增&#xff0c;max自减&#xff0c;当min>max的时候停止互换&#xff0c;代表到中间值 用代码实…

jquery 链模式调用简易实现

<script>// 定义一个名为A的构造函数&#xff0c;接受selector和context参数var A function (selector, context) {// 返回一个新的A.fn.init实例return new A.fn.init(selector, context);}// 设置A的原型和fn属性A.fn A.prototype { // 强化构造器:// 当显式地重写 …

无人机侦察打击方案(1)

​​​​​ 概述 任务来源于无人机侦察研制任务&#xff0c;涵盖无人机目标昼夜识别与跟踪、目标定位等功能任务。 组成及功能 无人机侦察系统设备构成如下图所示&#xff0c;分为光电云台、激光打击设备与操控端构成。 图 1 设备组成与链路 光电云台完成无人机目标自主识别…

Windows 系统通过 MSTSC 上传文件到 Windows 云服务器

操作场景 文件上传 Windows 云服务器的常用方法是使用 MSTSC 远程桌面连接&#xff08;Microsoft Terminal Services Client&#xff09;。本文档指导您使用本地 Windows 计算机通过远程桌面连接&#xff0c;将文件上传至 Windows 云服务器。 前提条件 请确保 Windows 云服务…

激光雷达定位初始化的另外一个方案 通过键盘按键移动当前位姿 (附python代码)

通常使用的是通过在 rviz 中点选指定初始化位置和方向来完成点云的初始化匹配。 但是这种粗略的初始化方法有时候可能不成功,因此需要使用准确的初始化方法,以更好的初始值进行无损检测配准。 为了提供更好的匹配初始值,我使用 Python 脚本获取键盘输入,并不断调整这个匹配…

枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~

目录 认识枚举 全文重点&#xff1a;枚举在单例模式中为什么是安全的&#xff1f; Lambda 表达式 概念&#xff1a; 函数式接口 lambda表达式的基本使用&#xff1a; lambda表达式的语法精简&#xff1a; lambda表达式的变量捕获 Lambda在集合当中的使用 在 Collecti…

【JAVA】一次操蛋的nginx镜像之旅

一、前言 由于我们的项目中使用到了nginx&#xff0c;同时我们的nginx是通过docker镜像进行安装的&#xff0c;由于nginx出现了问题&#xff0c;需要重新安装。于是。。。 二、通过docker进行安装 docker pull nginx:latest 1.5.2 脚本文件 在/home/docker/script路径下创…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 &#xff08;一&#xff09;解决策略一&#xff1a;多级缓存策略 客户端本地缓存 代理节点本地缓存 &#xff08;二&#xff09;解决策略二&#xff1a;多副本策略 &#xff08;三&#xff09;解决策略三&#xff1a;热点…

.NET 9 的新增功能

文章目录 前言一、.NET 运行时二、序列化三、缩进选项四、默认 Web 选项五、LINQ六、集合七、PriorityQueue.Remove() 方法八、密码九、CryptographicOperations.HashData() 方法十、KMAC 算法十一、反射十二、性能十三、循环优化十四、本机 AOT 的内联改进十五、PGO 改进&…

11.19.2024刷华为OD

文章目录 HJ51HJ53 杨辉三角HJ56HJ57 高精度整数加法HJ58HJ60 简单题HJ63 DNA序列&#xff08;简单题&#xff09;语法知识记录 HJ51 https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d?tpId37&tags&title&difficulty0&judgeStatus0&…

小米表盘自定义工具支持最新小米9pro

app下载(v5.2.28) 点击下载 介绍 米坛小米表盘自定义工具是专为小米手环用户设计的软件&#xff0c;它具备以下特点和功能&#xff1a; 兼容性广泛&#xff1a;支持包括小米手环7、7Pro、8、8Pro、9、9Pro以及小米手表S3、S4在内的多款设备。 持续更新&#xff1a;软件不断…

算法-二叉树(从理论知识到力扣题,递归、迭代。)

二叉树 一、二叉树理论知识1、种类a.满二叉树b.完全二叉树c.二叉搜索树d.平衡二叉搜索树 2、java对于树的理解3、存储a.链式存储&#xff08;常用&#xff09;b.数组存储 4、遍历方式a.深度优先搜索b.广度优先搜索 5、树的定义&#xff08;链式&#xff09; 二、力扣题解写题思…

青训营刷题笔记10

问题描述 小C拿到了一个排列&#xff0c;她想知道在这个排列中&#xff0c;元素 xx 和 yy 是否是相邻的。排列是一个长度为 nn 的数组&#xff0c;其中每个数字从 11 到 nn 恰好出现一次。 你的任务是判断在给定的排列中&#xff0c;xx 和 yy 是否是相邻的。 测试样例 样例1…

时间类的实现

在现实生活中&#xff0c;我们常常需要计算某一天的前/后xx天是哪一天&#xff0c;算起来十分麻烦&#xff0c;为此我们不妨写一个程序&#xff0c;来减少我们的思考时间。 1.基本实现过程 为了实现时间类&#xff0c;我们需要将代码写在3个文件中&#xff0c;以增强可读性&a…

Leetcode 路径总和

使用递归算法 class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {// 如果节点为空&#xff0c;返回falseif (root null) {return false;}// 如果是叶子节点&#xff0c;检查路径和是否等于目标值if (root.left null && root.right null) …

Linux开发讲课50--- epoll、poll、select的原理和区别

一、什么是epoll&#xff1f; epoll是一种I/O事件通知机制&#xff0c;是linux 内核实现IO多路复用的一个实现。IO多路复用是指&#xff0c;在一个操作里同时监听多个输入输出源&#xff0c;在其中一个或多个输入输出源可用的时候返回&#xff0c;然后对其的进行读写操作。 ep…

MySQL datetime不同长度的影响

MySQL datetime长度的影响 1.背景 MySQL数据库中某张表的某个字段类型设置datetime, 长度为0&#xff0c;在进行插入数据时&#xff0c;MySQL会对该字段进行舍入操作。 2.测试 1.创建一张测试表&#xff0c;里面有两个时间字段都是datetime&#xff0c;但其中一个长度为3 …

数据灾备方案学习

1. 数据灾备 1.1 备份 将数据由一份数据转存为多份数据的过程&#xff0c;即为备份&#xff0c;通常指将数据通过某些手段&#xff0c;将数据存放到其他不同设备中&#xff0c;防止数据丢失。指用户为应用系统产生的重要数据&#xff08;或者原有的重要数据信息&#xff09;制…