“故障排查”标签的文章
带有“故障排查”标签的文章共 32 篇,按发布日期从新到旧排列。
-
从睡眠恢复后损坏的应用 ── Windows 电源事件机制与扛得住恢复的业务应用
打开笔记本后业务应用的连接全断了——原因是设计从未考虑睡眠。本文根据一手资料整理 WM_POWERBROADCAST 通知流程、Modern Standby 行为、断开/重连设计、睡眠抑制与调查命令。
-
DllMain 与加载器锁 ── 「DLL 初始化里什么都别做」的真正原因
为何不得从 DllMain 调用 LoadLibrary 或与其他线程同步。本文根据一手资料说明加载器锁如何串行化每一条 DLL 通知、结构上必然死锁的经典场景、推迟初始化的正确设计,以及如何调查挂起。
-
「无响应」的真正含义 ── Windows 如何判定应用已挂起,以及如何设计不挂起的应用
Windows 的「无响应」是操作系统判定窗口已 5 秒未取出消息并换成幽灵窗口的机制。本文说明该判定的内部、挂起的经典原因、把重活移出 UI 线程的设计,以及调查挂起的步骤。
-
虚假唤醒 ── 条件变量为何会「未被通知就醒来」,以及在 Windows 上正确等待的方法
条件变量的等待即使没有通知到达也可能返回(虚假唤醒)。本文从 Windows 实现说明规格为何允许这一点,并给出用 while 循环和谓词在 Win32、C++ 和 C# 中正确等待的写法。
-
WPR/WPA 实务 ── 从系统整体调查「整台 PC 变慢」
任务管理器追不到的「整台 PC 变慢」「开机很慢」,可用 WPR/WPA 采集整个 OS 的 ETW 追踪再读。本文说明 wpr.exe 采集步骤,以及在 WPA 里怎么读 CPU、等待与磁盘 I/O。
-
多线程实务最佳实践 Java 篇 ── 虚拟线程时代的准则
Java 多线程的惯例是不直接创建线程,而是交给 ExecutorService 与虚拟线程来处理。本文整理 synchronized 与 ReentrantLock 的取舍、通过中断实现的协作式停止、ConcurrentHashMap 的原子操作,直至 Swing 的 EDT 等实务原则。
-
多线程实务最佳实践 C 语言篇 ── 以 Win32 API 的方式安全编写
C 语言 × Win32 的多线程有其定式:用 _beginthreadex 创建线程、SRW 锁与条件变量、Interlocked、以停止事件 + WaitForMultipleObjects 设计停止流程。本文还将梳理 TerminateThread 的危险性与 DllMain 的限制。
-
多线程实务最佳实践 C++ 篇 ── 用 RAII 和 jthread 从结构上消除事故
C++ 的多线程是数据竞争会变成未定义行为的世界。本文梳理 std::thread 析构函数的陷阱、jthread 与 stop_token 的停止设计、scoped_lock 的死锁规避、atomic 的正确定位,直至与 Win32 同步 API 的使用区分。
-
卷影复制服务(VSS)的原理与实务 ── 使用中文件为何能够备份
使用中的文件明明会因共享冲突而无法复制,备份软件为什么却能正常备份?本文将解说卷影复制服务(VSS)中请求者・编写器・提供程序的角色分工、写时复制的原理、vssadmin 的实务操作,以及差异区域的陷阱。
-
Windows I/O 的深层(第6回·最终回) ── 过滤器驱动程序与迷你过滤器:Procmon 与病毒扫描为何能够介入 I/O
本文是通过图解讲解 Windows 过滤器驱动程序与迷你过滤器的系列最终回。整理过滤器管理器与高度、pre/post 回调、Procmon 与杀毒软件能够检查全部 I/O 的机制,直至「唯独那个环境很慢」的排查步骤。
-
Windows I/O 的深层(第5回) ── NTFS 的内部结构:从 MFT 理解文件系统
本文是通过图解讲解 NTFS 内部结构的系列第 5 回。从开发者视角整理 MFT 与文件记录、多数据流(Zone.Identifier)、硬链接与 8.3 短文件名、重解析点、两种日志,直至稀疏与压缩等内容。
-
Windows I/O 的深层(第1回) ── 所有读写都会变成 IRP:I/O 系统全貌
本文是从根源讲解 Windows I/O 系统的系列第 1 回。通过图解梳理对象管理器的命名空间、驱动程序・设备・文件这三种对象、IRP 的生命周期,直至 CloseHandle 的背后机制。
-
用 Get-WinEvent 实务排查事件日志 ── 筛选速度决定调查时间
本文整理用 PowerShell 提升 Windows 事件日志调查效率的方法,涵盖用 Where-Object 筛选为何缓慢、FilterHashtable 与 XPath 的区分使用、重启・登录・应用异常终止的调查方法,直至多台计算机的日志收集。
-
Process Explorer / Handle / VMMap 实战 ── 从此刻的状态追查挂起・泄漏・「文件正在使用」问题
这是排查「逐渐变卡」「文件删不掉」「挂起无响应」问题的 Sysinternals 实战第二弹。从实务角度讲解 Process Explorer 的句柄搜索・线程堆栈・泄漏监控列、handle.exe,以及用 VMMap 对内存构成进行切分的方法。
-
Windows的时刻同步(w32time)与业务系统 ── 从原理出发解决「日志时间戳对不上」的问题
从 Windows 时间服务(w32time)的原理出发,讲解设备与 PC 之间日志时刻偏差的成因。整理域层级结构与工作组的默认行为、w32tm 命令诊断、高精度时刻与虚拟机的注意事项,直至 Stopwatch 与 UTC 并用的日志设计。
-
注册表的32位/64位重定向与虚拟化陷阱 ── Wow6432Node与「写入的值找不到了」问题
从实务角度梳理32位应用写入HKLM\Software时被重定向到Wow6432Node的机制、UAC虚拟化转发到VirtualStore的触发条件、COM注册按位数分离带来的实际危害,直至用RegistryView、reg.exe /reg:64正确读写的方法。
-
故障处理不止于恢复 ── 写给小型开发团队的 Postmortem(再发防止)实践模板
把故障处理停留在「修复、道歉,就此结束」,同样的故障就会反复发生。本文把 blameless postmortem 翻译给小型团队使用,整理出可在 1 小时内写完的模板、再发防止策略的强度判断表,以及实施的分级(triage)标准。
-
睡眠、休眠、Modern Standby 与长时间运行应用 ── 用设计防止「夜里意外停止」
本文从 S3 睡眠、休眠、Modern Standby 的区别入手,整理长时间运行的 Windows 应用为何会出现「早上一看已经停止」的原因,并讲解睡眠期间计时器与 TCP 连接的行为,以及如何用 SetThreadExecutionState 进行抑制。
-
接手了没有源代码也没有文档的系统 ── 在不中断运行的前提下开展运维保守的实务步骤
本文整理在没有源代码、也没有文档的业务系统上开始运维与保守工作的实务步骤。涵盖对运行环境的保全与备份、可执行文件与数据库的盘点、从行为中还原规格,以及续用、封装、重建之间的判断。
-
MAX_PATH 与 Windows 路径・文件名的陷阱 ── 260 字符限制、保留名称、末尾句点、大小写
梳理导致「找不到文件」的经典原因 ── 路径与文件名的各种限制。本文解析 MAX_PATH=260 的构成、通过 LongPathsEnabled 启用长路径、CON 等保留名称、末尾句点的规范化处理,以及 Path.Combine 的陷阱。
-
网络驱动器与 UNC 路径的陷阱 ── 业务应用中处理文件服务器(共享文件夹)的实务
本文整理业务应用向共享文件夹输出、监控时的常见故障:驱动器号(Z:)为何在服务中不可见、各执行账户所需的权限、错误 1219,以及 FileSystemWatcher 的注意事项。
-
Process Monitor(ProcMon)实战指南 —— 10 分钟定位「配置未生效」「ACCESS DENIED」问题
「明明修改了配置文件却没有生效」「昨天还能正常运行,今天却突然启动不了」——在动手修改源代码之前,Process Monitor(ProcMon)可以从文件、注册表访问的实际情况入手定位原因。本文从故障排查一线的视角,讲解 Filter 的实用技巧、NAME NOT FOUND・ACCESS DENIED・SHA...
-
用 PerfView 与 dotnet-trace 定位“变慢”的原因 ── .NET 性能排查实务入门
当业务应用出现“变慢”“CPU 占满”“偶尔卡死”时,该用哪个工具看什么?本文梳理 PerfView 与 dotnet-trace 的分工、CPU 采样的解读方法(inclusive/exclusive)、用 ThreadTime 排查阻塞时间,以及与 EventSource 自定义事件的组合使用,整理出一套实务...
-
Windows 事件日志・ETW 入门 ── 让业务应用程序的日志接入操作系统标准机制
Windows 业务应用程序的日志,是不是只靠文件日志来解决?事件日志与 ETW,是运维人员和操作系统标准工具所能看到的另一层记录。本文整理三种手段的分工方式、.NET 中的写入方法、通过 EventSource 进行的 ETW 埋点、收集与排查的实务做法,以及来源未注册、日志膨胀等常见陷阱。
-
用 WinDbg + SOS 解读崩溃转储 ── 采集之后的实务分析入门
本文说明如何用 WinDbg 与 SOS 扩展实际读取已采集的 Windows 崩溃转储。内容涵盖符号路径设置、以 !clrstack、!pe、!dumpheap -stat、!gcroot 追踪异常与内存泄漏的方法、原生崩溃的 !analyze -v,以及与 dotnet-dump analyze 的使用区分,...
-
任务计划程序的任务不执行、以 0x1 结束 ── 原因排查与安全的运维设计
本文整理 Windows 任务计划程序的执行账户与登录类型、「不管用户是否登录都要运行」的含义、以 0x1 结束的典型原因、启用历史记录、防止多重启动、PowerShell 脚本的正确调用方式,直到把定期执行真正落实到运维上的设计方针。
-
委托开发 Windows 应用程序前该梳理的事项
在委托外包开发 Windows 应用程序之前,梳理现有软件改造、设备联动、COM/ActiveX、发布与更新、维护等需要注意的要点。
-
Windows 应用崩溃时保留日志与转储的设计
整理当 Windows 应用因意外异常或程序缺陷而崩溃时,应如何组合使用常规日志、最终崩溃标记、WER LocalDumps 与监控进程,以便事后能够追溯原因。
-
Windows应用的crash dump收集入门 - 先搞清楚 WER / ProcDump / WinDbg怎么分工
本文整理在 Windows 应用追查难以复现的 crash 时,要先以 WER LocalDumps 按应用单独配置为起手式,再依现场状况追加 ProcDump,最后才考虑 MiniDumpWriteDump 自研收集的决策顺序。读完能理解 mini 与 full dump 的取舍、PDB 与保存运维要点,以及 ...
-
工业相机控制应用运行一个月后突然崩溃时(下篇) - 什么是 Application Verifier 与异常路径测试基础设施的做法
下篇整理 Application Verifier 是什么以及怎么把它编入 Windows 异常路径测试基础设施。用 Handles 抓 invalid handle、Low Resource Simulation 不用把机器榨干就触发资源不足,搭配 harness EXE 与自研日志,做出「坏了也能解释」的基础设施。
-
工业相机长期运行崩溃调查 - handle 泄漏篇
本文以工业相机控制应用长时间运行后突然崩溃的实际案例,从 handle 泄漏的排查方法与日志设计的角度,整理 Windows 应用长时间运行后崩溃时的排查思路。
-
TCP 重传导致工业相机通信中断的原因与排查
本文整理当 TCP 重传导致工业相机通信中断数秒时的排查方法,结合丢包、RTO、RFC1323 时间戳、Wireshark 确认要点一并说明。