百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

【Procdump神技能】轻松设置进程转储规则,解锁故障排查新姿势!

toyiye 2024-07-06 00:25 28 浏览 0 评论

概要:

ProcDump是一个命令行实用工具,其主要用途是监视应用程序的CPU峰值,并在出现峰值期间生成故障转储,管理员或开发人员可以使用这些转储来确定出现峰值的原因。 ProcDump还支持挂起窗口监视(使用与Windows和任务管理器使用的窗口挂起相同的定义)、未处理的异常监视,并且可以根据系统性能计数器的值生成转储。它还可用作可嵌入到其他脚本中的常规进程转储实用工具。

可以通过以下链接下载ProcDump工具

https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump

本文介绍了使用Procdump指定转储文件的相关规则与方法。

2. 详细信息:

若要定期创建一系列转储,可配合使用-s和-n选项,也无需指定任何转储条件。

  • -s指定了上一次捕获结束后和下一次捕获开始前的秒数。如果忽略-s选项,默认时间周期将为10秒。
  • -n指定了进程退出前要捕获的转储数量。捕获多个范本可以防止第一个转储是某些顺变条件导致,而非试图追踪的原因导致的。

例如,下列命令可立刻为Testapp进程捕获转储,并在5秒后再次创建,再过5秒再次创建,共创建3个转储文件:

Procdump -s 5 -n 3 testapp

监视CPU用量

-c CPU用量超过指定阈值并持续指定长度的时间后自动创建转储文件。

-cl CPU用量低于指定阈值并持续同样长度的时间后自动创建转储文件。

例如,testapp使用CPU用量持续超过90%,5秒,procdump创建转储文件并退出:

Procdump -c 90 -s 5 testapp

如下命令在testapp进程CPU占用超过80%并维持3秒后创建一个转储文件,直到总共创建3个转储。

Procdump -c 80 -s 3 -n 3 testapp

在多内核系统中,单一线程无法消耗所有处理器的全部时间。双核系统中,单一线程最多消耗50%的处理时间;四核系统中,最多消耗25%,以此类推。为了在多个内核的CPU系统中针对-c和-cl阈值进行等比放大,可在命令行中使用-u(单处理选项)。例如:

Procdump -c 90 -u testapp

可在testapp的CPU用量超过45%且维持10秒的情况下创建转储,双内核45%的用量相当于单内核90%的用量。而16核系统中,触发器法制将被调整为5.6525%。

提示:-c和-cl需要使用整数值,而-u选项可以为多核系统指定更为精准的阈值。

注意:CPU密集型用户模式线程通常会设计为通过多个CPU运行,除非处理器相关性被设置为仅允许使用一个CPU。-u选项并不能实现“如果进程超过单一CPU阈值后创建转储”类似的效果。

监视内存用量

  • -m 超出指定阈值时创建转储
  • -ml 低于指定阈值时创建转储

所指定的内存阈值以MB为单位统计。Procdump每秒一次检查该进程的内存计数器,但只能在检查的一刻发现进程的内存用量相对于系统提交限制(页面文件总量+大部分RAM)超出或低于阈值时才能创建转储。如果用量的尖峰或低谷只持续很短暂的时间,Procdump可能无法检测到。

例如,下面命令可以在testapp内存用量超过200MB后创建一个转储,并且在内存用量低于200MB之前,每隔五秒创建一个转储,直到10个。

Procdump -m 200 -n 10 -s 5 testapp

使用性能计数器触发转储

-p 后跟计数器名称及条件超出的阈值。

-pl 后跟计数器名称及条件低于的阈值。

注意:如果计数器名称中包含空格,需要将名称放在引号内。

机制与内存用量监视相同,每秒检测一次,可配合-n和-s选项定期创建更多转储文件。例如下列命令,可以检测系统进程数量超过750个之后,为taskmgr.exe创建转储,随后如果进程数量依然多于750,会每秒一次额外创建2个转储(共3个)。

Procdump -p "\System\Processes" 750 -s 1 -n 3 taskmgr.exe

  • -e 在进程遇到unhandle exception之后创建转储。
  • -e 1 在每次异常后创建转储,包括第一轮异常。
  • -h 监视目标进程挂起(停止响应)的顶层窗口,之后创建转储。不响应定义:如果某个被监测的窗口无法响应窗口消息五秒,则会认为窗口不响应。
  • -n 创建多个转储。除非-s指定不同的间隔,否则首次创建转储后,每间隔10秒创建一个转储
  • -l 监视目标仅此创建的调试输出。如果不使用-f筛选选项,Procdump会在每次创建调试输出后创建一个转储。借助筛选,可以指定哪些输出触发转储,哪些仅汇报给Procdump控制台输出。
  • -t 可在进程终止时创建转储。用于找出非由unhandled-exception导致的进程非预期退出。
  • -f 指定哪些异常或调试输出可触发转储,或仅输出值Procdump控制台输出。如果只希望查看所有调试输出和第一轮异常但不创建转储,可使用-f "",或其他绝对不会出现在输出结果中的任何文本,例如-f "THISWILLNEVERHAPPEN"

示例与演示:

范例1:Procdump附加至Word实例并回报遇到的第一轮异常信息,但不会创建转储文件

Procdump.exe -e 1 -f "" winword.exe C:\temp

范例2:随后10次遇到该第一轮异常后,每次创建完整转储并存储至C:\Temp目录,该异常代码为C0000005,代表“访问冲突”

Procdump.exe -ma -n 10 -e 1 -f c0000005 winword.exe C:\Temp

范例3:多选项配合使用。下列命令会在Testapp应用超过CPU阈值或内存用量阈值且维持3秒后,窗口不响应,或遇到unhandled-exception的异常后创建转储,其他情况则会自动退出。

Procedump.exe -m 200 -c 90 -u -s 3 -h -t -e testapp

演示:利用性能监视器配合procdump监视进程内存使用。

1)运行perfmon,性能监视器添加memory - committed bytes计数器。

2)右键点击刚刚添加的计数器 – 属性,查看计数器的名称。

3)找到想要监控进程的PID,并运行如下命令监控对应的进程,如果超出限额后自动创建转储:

Procdump -p "\Memory\Committed Bytes" 200000 892

4. 参考资料:

《Windows Internals实战指南》

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码