我有一个在 Linux 下失控的进程,我想创建一个转储文件,将其带到我的开发机器上并在那里进行检查。
在 Windows 中,可以通过多种不同的方式创建正在运行的程序的“小型转储”,包括 ADVPlus 和 Windows 任务管理器,方法是转到“进程”选项卡并右键单击选择“创建转储文件”。
有没有办法在 Linux 中实现这一点?
我需要调用堆栈、堆和堆栈内存(尤其是堆栈)、异常和所有其他内容。
答案1
那么创建转储文件的方法是:
gcore - Generate a core file for a running process
摘要 gcore [-o 文件名] pid
答案2
pmap <PID>
或者
strace -f -o xxx -p <PID>
可能是您正在寻找的工具。
pmap 向您展示所提供进程的内存使用情况的概览。 strace 跟踪进程执行的每个操作。使用 -f 告诉 strace 还考虑监视子进程,使用 -o xxx 告诉 strace 将输出写入文件。您还可以使用 strace 启动新进程,例如使用
strace cat /etc/passwd
如果你只对特定信息感兴趣,例如打开了哪些文件,你可以相应地启动 strace:
strace -f -o xxx -e trace=open -p <PID>
答案3
答案4
同时 ProcDump 来自Sysinternals 套件也已在非常自由的 MIT 许可下提供,相应的 GitHub 页面。
Usage: procdump [OPTIONS...] TARGET
OPTIONS
-C CPU threshold at which to create a dump of the process from 0 to 100 * nCPU
-c CPU threshold below which to create a dump of the process from 0 to 100 * nCPU
-M Memory commit threshold in MB at which to create a dump
-m Trigger when memory commit drops below specified MB value.
-n Number of dumps to write before exiting
-s Consecutive seconds before dump is written (default is 10)
TARGET must be exactly one of these:
-p pid of the process
因此,您可以从命令行参数中推断出,很容易对您知道行为不当的进程进行“快照”,因为它会占用过多的资源,以便稍后进行分析gdb
。
但是,与 Windows 版本相比,此 Linux 版 ProcDump 功能并不完整。