我刚刚开始玩procdump并且我希望在发生无意义的第二次机会异常时完全转储应用程序.
根据我运行的文档,它喜欢这样:
procdump.exe -ma -e -x C:\CrashDumps C:\Code\CrashApp\CrashApp\bin\Debug\CrashApp.exe
Run Code Online (Sandbox Code Playgroud)
CrashApp.exe是一个简单的控制台应用程序,在启动时抛出异常.
这是我得到的输出:
ProcDump v7.0 - Writes process dump files
Copyright (C) 2009-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards
Process: CrashApp.exe (6516)
CPU threshold: n/a
Performance counter: n/a
Commit threshold: n/a
Threshold seconds: 10
Hung window check: Disabled
Log debug strings: Disabled
Exception monitor: Unhandled
Exception filter: *
Terminate monitor: Disabled
Cloning type: Disabled
Concurrent limit: n/a
Avoid outage: n/a
Number of dumps: 1
Dump folder: C:\CrashDumps\
Dump …Run Code Online (Sandbox Code Playgroud) 最近,我们在尝试捕获2012 R2服务器上的各种IIS应用程序池的内存转储时遇到了问题.我已尝试使用任务管理器,但它会生成错误,以及在管理控制台中使用procdump:
PS C:\Users\_______\Downloads> procdump -mA 31016
ProcDump v7.1 - Writes process dump files
Copyright (C) 2009-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards
[19:59:22] Dump 1 initiated: C:\Users\____\Downloads\w3wp.exe_161008_195922.dmp
[19:59:25] Dump 1 writing: Estimated dump file size is 29278 MB.
[20:01:15] Dump 1 error: Error writing dump file: 0x80070005
Error 0x80070005 (-2147024891): Access is denied.
[20:01:15] Waiting for dump to complete...
[20:01:17] Dump count not reached.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了-ma和-mA以及-64和procdump64的各种组合,但是对于使用超过~16GB内存的工作进程,它们都具有相同的Access被拒绝错误.
我还尝试添加-r来反映/克隆该过程,如下所述:快速获取ASP.NET应用程序池的内存转储但仍然得到与上面相同的错误消息.
更新:因此,默认情况下,如果IIS应用程序池在90秒内未响应正在进行的内部ping请求,则它们将被回收.您可以在高级设置中看到此信息:
并且大约90秒后出现错误消息,因此可能是问题的原因.
有谁知道是否可能/如何使用 ProcDump 获取 Windows 服务的转储?我想要运行的命令是这样的:
ProcDump -e -mp -x myservice.exe mydump.dmp
Run Code Online (Sandbox Code Playgroud)
但是,我收到“无法从命令行或调试器启动服务”消息。有谁知道是否有办法解决这个问题?
我很难从使用ProcDump创建的崩溃转储中获取任何有意义的信息,但我很确定它与我一直看到的看似随机的崩溃有关.
我有一个在Windows 7 64位上运行的VB6应用程序.每隔一段时间,它就会崩溃,在错误日志中留下一个错误ntdll.dll的条目,但不提供更多信息.所以,我一直在运行SysInternals的ProcDump运行过程,为我自动创建故障转储.
我一直无法在内部重新制造崩溃,所以我很确定如果我有一个转储,它会告诉我问题是什么.但是,在运行一天的大部分时间之后,我看到ProcDump已经编写了几个转储,尽管该程序仍然正常运行.它似乎确实指向ntdll.dll的问题,但我不知道从哪里开始应用此修复程序.
!analyze -v在其中一个转储上运行会给我以下内容:
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
FAULTING_IP:
+0
00000000 ?? ???
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: 000007c8
PROCESS_NAME: application.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
APP: application.exe
BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL
PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT_AFTER_CALL
DEFAULT_BUCKET_ID: STATUS_BREAKPOINT_AFTER_CALL
LAST_CONTROL_TRANSFER: from 7754431f …Run Code Online (Sandbox Code Playgroud) 这个问题可能有点尴尬,但这是我的详细问题:
目前我正在考虑设置SysInternals的procdump.exe以监控我们的应用程序,它显示虚假消失 - 也就是说,用户报告应用程序在应用程序的短暂可见挂起之后简单地"消失"而没有任何痕迹窗口.
我的第一个想法是运行procdump -e -x . MyApp.exe,当应用程序遇到未处理的异常时会记录崩溃转储,但后来我发现还有一个-t开关, -
-t - 进程终止时写入转储.
进程终止时自动生成转储.
我已经使用我们的应用程序测试了-t开关,方法是在我可以触发它的已定义位置插入ExitProcess或TerminateProcess调用.
虽然应用程序的行为符合预期,即TerminateProcess立即"杀死"正在运行的应用程序并ExitProcess需要一段时间,因为全局清理运行,这种方式生成的转储在这两种情况下都是无用的.
我得到的转储-t总是只包含一个sinlge线程(应用程序在终止时运行超过20个线程),并且callstack甚至不在一个有用的位置.(它似乎是终止应用程序中的一个随机线程.)
难道我做错了什么?我是否可以有效地用于procdump -t跟踪进程退出函数的意外调用?
我正在尝试解决我们的一个网站问题导致CPU间歇性地出现问题.该站点位于Web服务器场中,并且在不同时间间歇性地跨所有服务器发生.导致峰值的过程是w3wp.exe.我检查了所有显而易见的事情,现在想要为w3wp.exe分析多组转储文件,这会导致峰值.
我正在尝试在指定的时间内达到指定的CPU阈值时自动生成w3wp.exe进程的转储文件.
我可以使用ProcDump.exe来执行此操作,并且它可以在PID(进程ID)更改之前触发它.
例如:(
procdump -ma -c 80 -s 10 -n 2 5844其中5844是PID)
上面的命令将监视w3wp.exe,直到CPU达到80%,持续10秒,并且至少需要两次迭代才能完全转储.
问题:
我有多个运行w3wp.exe的实例,所以我不能使用进程名称,我需要指定PID.每次回收App Pool时,PID都会更改.这会导致PID在我可以捕获多个转储文件之前更改.然后我需要在每个Web服务器上再次启动procdump.
我的问题:
即使在PID更改后,如何自动生成转储文件?
这里有一个ProcDump教程:http://drdobbs.com/blogs/parallel/229300328
我有一个崩溃的应用程序,所以我想看看ProcDump是否可以提供帮助.该应用程序是C:\Program Files\MyCompanyName\thebadapp.exe这样我将ProdCump.exe复制到C:\并打开它像这样:
C:\procdump -e C:\Program Files\MyCompanyName\thebadapp.exe
Run Code Online (Sandbox Code Playgroud)
......但是Prodcump正在回归:
目录C:\ Files\MyCompanyName \不存在
我做错了什么?
谢谢.
我正在尝试为 .Net C# 应用程序创建故障转储。为此,我编写了一个代码,它会使应用程序因堆栈溢出异常而崩溃:
namespace Crashme
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(2000);
}
Console.WriteLine("Calling text");
crash obj = new crash();
obj.sMyText = "abc";
}
}
class crash
{
public string sMyText
{
get { return sMyText; }
set { sMyText = value; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的 procdump 命令:
.\procdump.exe -ma -e crashme.exe crash_dump1.dmp
Run Code Online (Sandbox Code Playgroud)
应用程序按预期崩溃,procdump 也在捕获它。我可以在 procdump 监控控制台上看到打印。但是没有创建转储。
猜猜我没有使用正确的 procdump 命令。有人可以帮忙吗?