HOWTO 从 teuthology 中提取堆栈跟踪
当 teuthology 测试套件在 Ceph 上失败时,它会显示在 pulpito 中。例如,在 monthrash 测试套件中存在一个失败,其中包含 详细信息和 日志链接。通过删除链接中的 teuthology.log 部分,目录列表会显示所有信息 为本次运行存档。
在上面的示例中,日志显示
client.0.plana34.stderr:+ ceph_test_rados_api_io client.0.plana34.stdout:Running main() from gtest_main.cc client.0.plana34.stdout:[==========] Running 43 tests from 4 test cases. client.0.plana34.stdout:[----------] Global test environment set-up. client.0.plana34.stdout:[----------] 11 tests from LibRadosIo client.0.plana34.stdout:[ RUN ] LibRadosIo.SimpleWrite client.0.plana34.stdout:[ OK ] LibRadosIo.SimpleWrite (1509 ms) client.0.plana34.stdout:[ RUN ] LibRadosIo.ReadTimeout client.0.plana34.stderr:Segmentation fault (core dumped)
这表明 ceph_test_rados_api_io 正在从 plana34 机器运行,并且核心转储,并且 remote/plana34/coredump 子目录包含相应的核心转储。
teuthology 日志 显示从哪个仓库下载了二进制文件(它是由 gitbuilder 制作的)。
echo deb http://gitbuilder.ceph.com/ceph-deb-precise-x86_64-basic/sha1/f5c1d3b6988bae5ffb914d2ac0b2858caeffe12c precise main | sudo tee /etc/apt/sources.list.d/ceph.list
并在 Ubuntu precise 12.04 64位 上运行此行,如子目录 precise-x86_64 的名称所示,将使相应的二进制软件包可用。也可以直接从 pool/main/c/ceph 子目录下载它们。后缀为 -dbg 的软件包 保留了调试符号,这对于 gdb 显示信息丰富的堆栈跟踪是必要的。
ceph_test_rados_api_io 二进制文件是 ceph-test 包的一部分,可以使用以下命令提取:
$ dpkg --fsys-tarfile ceph-test_0.85-726-gf5c1d3b-1precise_amd64.deb | \ tar xOf - ./usr/bin/ceph_test_rados_api_io \
ceph_test_rados_api_io
并使用以下命令显示堆栈跟踪:
$ gdb /usr/bin/ceph_test_rados_api_io 1411176209.8835.core (gdb) bt #0 0x00007f541b95750a in pthread_rwlock_wrlock () from /lib/x86_64-linux-gnu/libpthread.so.0 #1 0x00007f541bd41341 in RWLock::get_write(bool) () from /usr/lib/librados.so.2 #2 0x00007f541bd2bbc9 in Objecter::op_cancel(Objecter::OSDSession*, unsigned long, int) () from /usr/lib/librados.so.2 #3 0x00007f541bcf1349 in Context::complete(int) () from /usr/lib/librados.so.2 #4 0x00007f541bdad5ea in RWTimer::timer_thread() () from /usr/lib/librados.so.2 #5 0x00007f541bdb149d in RWTimerThread::entry() () from /usr/lib/librados.so.2 #6 0x00007f541b953e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0 #7 0x00007f541b16a3fd in clone () from /lib/x86_64-linux-gnu/libc.so.6 #8 0x0000000000000000 in ?? ()