一、前言
二、安装下载
breakpad 网址:https://chromium.googlesource.com/breakpad/breakpad
- 下载源码:
git clone https://chromium.googlesource.com/breakpad/breakpad
- 编译:
./configure && make
- install the built libraries
make install
这里会有一个报错,make完这里会报错breakpad/src/third_party/lss/linux_syscall_support.h没有这个文件:
该文件可在https://chromium.googlesource.com/linux-syscall-support/
下载,并放到breakpad/src/third_party/lss/中。
三、分析
Kudu 使用 Google breakpad 库在 Kudu 遇到崩溃时生成小型转储。小型转储文件包含有关崩溃进程的重要调试信息,包括加载的共享库及其版本、崩溃时运行的线程列表、处理器寄存器的状态以及每个线程的堆栈内存副本,以及 CPU 和操作系统版本信息。这些小型转储通常只有几 MB 大小,即使禁用核心转储生成也会生成。目前,只能在 Linux 部署上生成小型转储。
默认情况下,Kudu 将其小型转储存储在名为minidumps. 这个位置可以通过设置–minidump_path标志来定制 。Kudu 将在删除旧的之前只保留一定数量的小型转储,以避免用小型转储文件填满磁盘。可以通过设置–max_minidumpsgflag来控制将保留的最大小型转储数量。
小型转储包含特定于创建它们的二进制文件的信息,因此如果无法访问崩溃的确切二进制文件或非常相似的二进制文件,则没有用。
Kudu 开发人员可以在他们的开发环境中访问 minidump 工具,因为它们是作为 Kudu 第三方构建的一部分安装的。它们可以在 Kudu 开发环境下找到uninstrumented/bin。例如, thirdparty/installed/uninstrumented/bin/minidump-2-core。
如果启用了小型转储,则可以强制 Kudu 创建小型转储而不终止进程。为此,请USR1向kudu-tserverorkudu-master进程发送信号 。例如:
使用 GNU 调试器查看小型转储堆栈跟踪
尽管小型转储不包含堆信息,但它确实包含线程和堆栈信息。您可以将小型转储转换为核心文件以使用 GDB 进行查看。
要将小型转储(.dmp文件)转换为核心文件:
minidump-2-core -o 02cb4a97-ee37-6454-73a9d9cb-590c7dde.core \
02cb4a97-ee37-6454-73a9d9cb-590c7dde.dmp
要使用 GDB 查看核心文件(在parcel 部署上):
gdb /opt/cloudera/parcels/KUDU/lib/kudu/sbin-release/kudu-master \
-s /opt/cloudera/parcels/KUDU/lib/debug/usr/lib/kudu/sbin-release/kudu-master.debug \
02cb4a97-ee37-6454-73a9d9cb-590c7dde.core