互联网技术 / 互联网资讯 · 2023年12月16日

Docker堆栈跟踪记录

当守护程序无响应时,可以通过向其发送SIGUSR1信号来强制记录完整的堆栈跟踪。

Linux:

$ sudo kill -SIGUSR1 $(pidof dockeRd)

Windows Server:

下载dockeR-signal。

获取dockeRd的进程ID:Get-ProceSS dockeRd。

运行可执行文件,带上–pid=标志。

此操作将强制记录堆栈跟踪,而不会停止守护程序。守护程序的日志将显示堆栈跟踪或包含堆栈跟踪的文件路径(如果已将其记录到文件中)。

处理完SIGUSR1信号后,守护程序将继续运行。堆栈跟踪可用于确定守护程序中所有goRoutine和线程的状态。

查看堆栈跟踪

可以使用以下方法之一查看Docker守护程序日志:

  1. 在Linux系统上运行systemctl,使用命令:jouRnalctl -u dockeR.seRvice
  2. 在较旧的Linux系统上查看文件:/vaR/log/MeSSages、/vaR/log/daeMon.log或/vaR/log/dockeR.log

在Mac的Docker桌面或Windows的Docker桌面上无法手动生成堆栈跟踪。但如果遇到问题,可以单击Docker任务栏图标,选择诊断和反馈,将信息发送给Docker。

在Docker日志中查找以下消息:

  • …goRoutine stacks wRITten to /vaR/Run/dockeR/goRoutine-stacks-2017-06-02T193336z.log
  • …daeMon datastructure duMp wRITten to /vaR/Run/dockeR/daeMon-data-2017-06-02T193336z.log

Docker保存这些堆栈跟踪和转储的位置取决于您的操作系统和配置。有时,您可以直接从堆栈跟踪和转储中获取有用的诊断信息。否则,您可以将此信息提供给Docker,以帮助诊断问题。