2013-08-12 3 views
2

systemtap을 사용하여 MySQL을 추적하고 싶습니다.
mysqld 추적 SystemTap 사용

[[email protected]]$ stap -l 'process("/home/mysql/mysql5.5.33/bin/mysqld").mark("*")'
[[email protected]]$(아무것도 출력 상)

:
MySQL을 구성하고 구축 후 문제는, 내가 서버를 시작, 내가 서버에 존재하는 마커 정보를 얻을 수 없습니다

내 ENV는 다음과 같이

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 

이 나는 ​​다음과 같이 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 : 나는 기능 출력을 얻을 수 있습니다
[[email protected]] stap -L 'process("/home/mysql/mysql5.6.12/bin/mysqld").function("main")'
process("/home/mysql/mysql5.6.12/bin/mysqld").function("[email protected]/home/mysql/mysql-5.6.12/sql/main.cc:23") $argc:int $argv:char**

readelf -n /home/mysql/mysql5.6.12/bin/mysqld
`길이으로 0x00000020와 오프셋 0x0000021c에서 참고 :
소유자 데이터 크기 설명
GNU으로 0x00000010 NT_GNU_ABI_TAG (ABI 버전 태그)

,536 길이 0x00000024와 오프셋 0x0000023c에서 91,363,210

주 :
소유자 데이터 크기 설명
GNU 0x00000014 NT_GNU_BUILD_ID (독특한 빌드 ID의 비트 스트링)은`

+0

"readelf -n /home/mysql/mysql5.6.12/bin/mysqld"에 일부 NT_STAPSDT 비트가 포함되어 있습니까? – fche

+0

readelf -n /home/mysql/mysql5.6.12/bin/mysqld 길이으로 0x00000020와 오프셋 0x0000021c에서 참고 : 소유자 데이터 크기 설명 GNU으로 0x00000010 NT_GNU_ABI_TAG (ABI 버전 태그) 길이 0x00000024와 오프셋 0x0000023c에서 주 : 소유자 데이터 크기 설명 GNU 0x00000014 NT_GNU_BUILD_ID (고유 빌드 ID 비트 스트링)' – orain

답변

2

그것은 MySQL을위한 -DENABLED_DTRACE = 1 비트는 사실에서 컴파일하는 것만으로는 충분하지이었다 보인다 sys/sdt.h 도구. 그들이했다면, 당신은 readelf에 여분의 데이터를 보았을 것입니다. mysql 빌드 트리에서 개별 .o 파일을 살펴볼 수도있다. 예를 들어, 페도라 19의 mariadb 서버 패키지는 마커를 가지고 :

% 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 

을 그리고 거기는 = ON -DENABLE_DTRACE로 구성되어 있습니다. 아마도 귀하의 -DENABLED_DTRACE 대 -DENABLE_DTRACE 오타입니다.

+0

thx, 시도해 보겠습니다 :-) – orain