如何在 Linux 中创建正在运行的进程的转储文件?

如何在 Linux 中创建正在运行的进程的转储文件?

我有一个在 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

尝试这个:

cat /proc/<pid>/smaps > mem.txt

链接也可能对您有帮助。

答案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 功能并不完整。

相关内容