一、问题描述

我们在使用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运行程序时桌面窗口卡死相关推荐

  1. Win7运行程序时弹出“windows防火墙安全警报“的解决方法

    win7系统运行程序时经常弹出Windows安全警报,提示"Windows 防火墙已阻止程序的部分功能"到底怎么回事呢?其实这是防火墙为防止一些程序恶意访问网络而设定的,我们知道W ...

  2. 解决:pycharm运行程序时在Python console窗口中运行 һ����ң�������1�����

    解决:pycharm运行程序时在Python c 问题: 在pycharm中右键点击run运行程序,发现没有打开run窗口运行,而是在Python console窗口中运行的. 解决方法: 打开菜单栏 ...

  3. mintty运行windows本地程序时输入输出的缓冲问题

    printf函数的输出缓冲问题 问题描述 printf函数使用了行缓冲,只有输出了换行符才刷新输出.但如果需要读取用户输入,同样会刷新stdout的输出缓冲,而不论是否有换行. // 输入整数 a,输 ...

  4. 在AVD上运行程序时,程序闪退并报错unfortunately,xx has stopped

    在AVD上运行程序时,程序闪退并报错unfortunately,xx has stopped 事实上,这个错误是事出有因的,而非AVD或者AS有问题. 由于刚开始学习安卓,所以还没有习惯如何对安卓程序 ...

  5. matlab输入指令错误怎么修改,在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?...

    点击查看在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义. 怎么修改?具体信息 答:MATLAB程序运行错误后,切换到MATLAB命令行中,观察命令行中的错误信息,确定错误原因. 1. ...

  6. linux进程莫名其妙被kill,Linux运行程序时,程序进程莫名退出(被杀死)

    Linux运行程序时,程序进程莫名退出(被杀死) 1.知识点 1)Linux程序进程被杀,日志突然中止,可以考虑是否因为程序占用内存过高,导致系统内存不足,为避免系统崩溃,系统寻找内存占用最大的进程k ...

  7. Microsoft Visusl C++2010运行程序时,调试弹出黑框自动闪退无法看见运行结果的解决方法

    1.Microsoft Visusl C++2010运行程序时,调试弹出黑框自动闪退无法看见运行结果的解决方法 方法在图片下面,耐心的看哟,千万不要错过这莫好的方法呢!!! 一个小案例(输入数据转换度 ...

  8. 在Qt编译好之后运行程序时提示:程序异常结束。The process was ended forcefully. ....exe crashed.

    你得把所用dll库的路径加入系统变量Path中 比如我用该目录下的dll文件 我就得把这个路径加入环境变量 解决方法来自: [Qt学习笔记]在Qt编译好之后运行程序时提示:程序异常结束.The pro ...

  9. pycharm运行程序时在Python console窗口中运行

    问题:在pycharm中点击run运行程序,发现没有打开run窗口,而是打开的Python console窗口. 解决方法:打开菜单栏run->edit configurations,把下图中的 ...

最新文章

  1. python name_python中__name__的使用
  2. 流畅的python读书笔记-第一章Python 数据模型
  3. 小白都能看懂的目前主流加密MD5验签
  4. 爬虫的配置、启动和终止
  5. 强化学习(四)---基于模型动态规划问题
  6. 使用await实现多接口并行调用
  7. url(r'^index/$',views.index)的含义解释
  8. 欢迎来到开源的世界!
  9. 201触摸ic应用电路_PCB板和集成电路的区别有哪些
  10. KONG网关 — 插件开发
  11. ReentranLock源码分析
  12. 11-实战模拟DRBD项目案例环境准备
  13. Android进阶学习方法总结(内附阿里P7进阶学习全套资料)
  14. FS7022双节锂电池8.4V保护IC电路图
  15. Bat脚本 -(一)- echo/ echo off/ echo on/ @ / start / pause / rem
  16. matlab画colormap
  17. 《愤怒的小鸟》全系列游戏——风靡全国,空降奴改:愤怒的小猪来袭~(版本二)
  18. Swift中方法的多面性
  19. React 环境搭建以及创建项目工程(一)
  20. 05_网站日志数据分析

热门文章

  1. [生存志] 第22节 历代大事件概览 五代十国
  2. 11个资源强大的网站!知乎超20万人强烈推荐,再也不怕资源难找
  3. 价值百万的企业大数据分析报告是如何炼成的?
  4. 软件测试1——PIE模型
  5. jsp mysql电影网站_JSP+Servlet+C3P0+Mysql实现的YCU movies电影网站
  6. CRM管理系统查询客户信息
  7. Cadence CIS 器件管理平台解决方案
  8. Intel Me更新
  9. DC-DC BOOST空载输入电流如何计算?
  10. 大数据清洗2(元素操作)