admin 管理员组文章数量: 887021
一、问题描述
我们在使用windows 系统过程中,经常会遇到执行某些程序的时候,程序窗口显示“未想一个响应”,桌面窗口整个卡死的情况,但是过一段时间会自动恢复,查看任务管理器,并未发现负载异常的进程,一段时间又会出现卡死的情况如此反复。
Windows 官方文档。
二、分析思路
1、窗口卡死,又称UI卡死;windows的UI程序都是消息驱动的,每个窗体有一个消息线程,用于响应用户事件(鼠标、键盘等),也就是一个消息队列。当一个事件里消息线程阻塞了,后面的消息一直卡在消息队列里,卡到一定程度,就界面就停止响应了。所以出现界面卡死,思考的方向是消息循环是不是能出现问题了。下面分析windows程序界面卡死的几个可能的原因:
1)主线程(UI线程)出现死循环:
如果主线程出现死循环,那么windows将不能从消息队列中取出消息,并进行处理,所以出现卡死现象。为了验证是这个原因导致界面卡死,打开任务管理器,如果该进程的cpu使用率一直保持非零,比如一直保持在3%,那么界面卡死的原因是主线程死循环了。
2)主线程和其他的线程由于资源或者锁争夺,出现了死锁。
如果主线程由于跟其他的线程由于争夺资源或者锁,出现了死锁,那么主线程会一直等待资源或者锁,导致主线程不能继续往下执行,分发和处理消息,所以出现卡死。这种情况下,任务管理器中这个进程的cpu使用率一般是0,也有意外是除这个线程外,其他的线程也在运行,耗费cpu。所以最好的办法是使用调试器,挂载在这个进程上,观察这个进程的各个线程调用栈,观察线程等待的资源等。
进程被调试挂载了,调试器在一个断点处断下。这种情况出现的非常少,只有在调试一个程序的时候才会出现。
3)程序有GDI对象泄漏,导致界面卡死
对于这种情况。通过观察任务管理器的GDI数据可以发现问题。首先任务管理器的“查看”->“选择列”出现如下的界面,选择GDI对象。这样在任务管理器中就可以看到进程的GDI对象数目了。如果GDI对象数达到千数量级,那么很有可能是这个原因。
2、查看是否中毒和恶意软件注入
现场通过杀毒未发现中毒现象。系统如果感染了病毒、木马,它们会在电脑后台不断的运行复制,导致一直占用CPU资源,电脑系统出现严重卡顿。流氓软件是介于病毒和正规软件之间的软件。如果电脑中有流氓软件,会不经用户许可,自动运行,占用CPU资源等等。此时,就需要使用杀毒、强力卸载软件来进行杀毒和软件的卸载。
3、服务异常排查:
1)Win+R输入:msconfig 打开系统配置
点击”服务”标签卡,勾选”隐藏所有的 Microsoft 服务”,然后点击全部禁用(若您启用了指纹识别功能,请不要关闭相关服务)
点击”启动”标签卡, 点击”打开任务管理器”,然后禁用全部启动项并确定
重启设备尝试。
2)“服务” 界面找到名为“Connected User Experiences and Telemetry”和superfetch的服务,禁用。
4、查看异常服务对系统调用的影响,排除问题
现场因是vm,报vmtools服务处于“未运行”状态,实际服务是启动状态的,造成了系统卡死,重新安装vmtools未果(最新版)。
5、电源选项调试
1)HKEY_Local_Machine\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\0b2d69d7-a2a1-449c-9680-f91c70521c60,选择Attributes属性将数值从1改为2;
2)HKEY_Local_Machine\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\dab60367-53fe-4fbc-825e-521d069d2456,Attributes属性将数值从1改为2;
3)打开电源设置,更改高级电源设置 —> 展开“硬盘”,把“AHCI Link Power Management- HIPM/DIPM”下的选项都改成“Active”,把“AHCI Link Power Management - Adaptive”下的选项都设置成“0 ms”;把“PCI Express”下的“链接状态电源管理”都设置成“关闭”,并点击确定;
6、powershell脚本调试应用重置
Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “ ( ( (_.InstallLocation)\AppXManifest.xml”}
7、系统更新导致的可能问题
查看最近windows更新,win10强制要求数字签名的驱动,自带了大量驱动。而且会通过系统更新下载没有或者过时的驱动,所以如果你之前使用win7或者win10 1511没有问题而升级到新版本频繁各种问题的原因就极可能是驱动问题。结合事件管理器综合判断。
三、调试工具
1)ProcessExplorer
它是一款windows官方的增强型任务管理工具。Process Explorer不仅可以帮万平米监视或重启、终止任何程序,还可以帮助我们清楚了解程序的运行变化情况。并且Process Explorer还能够看到用户电脑在运行的程序和CPU、内存的使用情况,方便管理电脑的后台程序。
工具下载:Process Explorer v16.43。
2)VTune
3)LoaderLocker:调试助手
参考混合程序集的初始化。
4)ProcDump
ProcDump 是一个命令行实用程序,其主要目的是监视应用程序的 CPU 峰值并在峰值期间生成crash dumps ,管理员或开发人员可以使用它来确定峰值的原因。 ProcDump 还包括挂起的窗口监控(使用与 Windows 和任务管理器使用的窗口挂起的相同定义)、未处理的异常监控并可以根据系统性能计数器的值生成转储。它还可以用作通用进程转储实用程序,您可以将其嵌入到其他脚本中。
使用参考。
5)Windows 调试程序 (WinDbg)
用于调试内核模式和用户模式代码、分析故障转储以及在代码执行时检查 CPU 寄存器。
使用参考。
案例参考。
6)PsSuspend
PsSuspend 允许挂起本地或远程系统上的进程,挂起后可在稍后的某个时间点继续运行,而不是终止消耗资源的进程。
pssuspend.exe pid 挂起进程
pssuspend.exe -r pid 恢复进程
pskill.exe pid 杀死进程,同Linux下的kill
版权声明:本文标题:Windows运行程序时桌面窗口卡死 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1727629475h1142510.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论