我想使用systemtap来追踪MySQL
问题是,在配置和构建MySQL并启动服务器之后,我无法获得服务器中存在的标记信息:
[root@localhost]$ stap -l 'process("/home/mysql/mysql5.5.33/bin/mysqld").mark("*")'
[root@localhost]$
(无任何产出)
我的环境如下:
1 stap version
$ stap --version
Systemtap translator/driver (version 1.7/0.152 non-git sources)
Copyright (C) 2005-2012 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
enabled features: AVAHI LIBRPM LIBSQLITE3 NSS BOOST_SHARED_PTR TR1_UNORDERED_MAP NLS
2我使用脚本配置MySQL如下:
cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql5.6.12 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_DTRACE=1 \
-DWITH_DEBUG=1 \
BTW:我可以得到功能输出
[root@localhost] stap -L 'process("/home/mysql/mysql5.6.12/bin/mysqld").function("main")'
process("/home/mysql/mysql5.6.12/bin/mysqld").function("main@/home/mysql/mysql-5.6.12/sql/main.cc:23") $argc:int $argv:char**
readelf -n /home/mysql/mysql5.6.12/bin/mysqld
`注意偏移量为0x0000021c,长度为0x00000020:
所有者数据大小说明
GNU 0x00000010 NT_GNU_ABI_TAG(ABI版本标签)
偏移量为0x0000023c且长度为0x00000024的注释:
所有者数据大小说明
GNU 0x00000014 NT_GNU_BUILD_ID(唯一的构建ID位串)`
答案 0 :(得分:2)
似乎mysql的-DENABLED_DTRACE = 1位不足以在sys / sdt.h检测中实际编译。如果他们这样做了,你会在readelf中看到额外的数据。您可以尝试查看mysql构建树中的各个.o文件。例如,Fedora 19的mariadb-server软件包确实有标记:
% stap -L 'process("/usr/libexec/mysqld").mark("*")'
process("/usr/libexec/mysqld").mark("command__done") $arg1:long
...54 lines omitted...
process("/usr/libexec/mysqld").mark("update__start") $arg1:long
在那里配置-DENABLE_DTRACE = ON。也许你的只是-DENABLED_DTRACE vs -DENABLE_DTRACE错字?