Quantcast
Channel: 日々の覚書
Viewing all articles
Browse latest Browse all 581

percona-toolkit 3.0.12とそれ以前のpt-ioprofileがCentOS 7.xで動かない件

$
0
0

TL;DR

  • straceの出力がちょっと変わったのでそれをひっかけられていない
  • Percona Toolkitへのバグレポはこちら
  • パッチは以下のとおり
    • 3.0.12の /usr/bin/pt-ioprofileでは574行目だけど、この行を探せば他のバージョンでも適用できるはず
574c574
< /^Process/ { mode = "strace"; }

> /^(strace: )?Process/ { mode = "strace"; }

ちょっと前からなんかおかしいような気はしていた。
MySQL 8.0だからいけないのかなとか思っていたけど、よく考えれば pt-ioprofileシェルスクリプトだし中で lsofstraceを取って awkで頑張っているだけなので mysqldのバージョンは関係ないはずだ。
CentOSのバージョンのせいかと思って比べてみたらどうやら当たりの様子。
$ cat /etc/centos-release
CentOS release 6.10 (Final)

$ pt-ioprofile
Wed Oct 17 12:24:46 JST 2018
Tracing process ID 365
total pread read pwrite write fsync fdatasync open close getdents lseek fcntl filename
4.430536 0.000000 0.000000 0.159895 0.000000 4.270641 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 /var/lib/mysql/ib_logfile0
0.071731 0.000000 0.000000 0.003155 0.000000 0.061186 0.000000 0.000452 0.000301 0.000000 0.006448 0.000189 /var/lib/mysql/mysqlslap/t1.ibd
0.052828 0.000000 0.000000 0.004702 0.000000 0.048126 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 /var/lib/mysql/ibdata1
0.013654 0.000436 0.001654 0.000204 0.001798 0.000000 0.006763 0.000823 0.000716 0.000000 0.001260 0.000000 /var/lib/mysql/mysqlslap/t1.frm
0.005068 0.000000 0.000000 0.000000 0.000000 0.005068 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 /var/lib/mysql/mysql/innodb_index_stats.ibd
0.002342 0.000000 0.000000 0.000000 0.000000 0.002342 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 /var/lib/mysql/mysql/innodb_table_stats.ibd
0.000917 0.000000 0.000176 0.000000 0.000000 0.000000 0.000000 0.000323 0.000233 0.000185 0.000000 0.000000 /dev/urandom
0.000911 0.000000 0.000000 0.000000 0.000000 0.000000 0.000080 0.000549 0.000141 0.000141 0.000000 0.000000 /var/lib/mysql/mysqlslap/
0.000628 0.000000 0.000000 0.000000 0.000140 0.000000 0.000000 0.000376 0.000112 0.000000 0.000000 0.000000 /var/lib/mysql/mysqlslap/db.opt
0.000400 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000213 0.000000 0.000000 0.000187 0.000000 /var/lib/mysql/mysql/event.MYD
0.000126 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000126 0.000000 0.000000 0.000000 0.000000 /var/lib/mysql/mysql/proc.MYD
同じMySQL 5.7.23にmysqlslapをかけながら pt-ioprofileをぶっ放しても、CentOS 7.5の方は何も返してくれない。
$ cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)

$ pt-ioprofile
Wed Oct 17 12:07:17 JST 2018
Tracing process ID 27170
total filename
取り敢えずまあ採取した stracelsofの結果を捨てずに残しておく --save-samplesオプションなど使いつつ、 bash -xで何をしているのか調べていく。
$ bash -x /usr/bin/pt-ioprofile --save-samples /tmp/
..
+ _lsof 27170
..
+ strace -T -s 0 -f -p 27170
..
+ awk -f /tmp/pt-ioprofile.7393.52pjmz/tabulate_strace.awk /tmp/pt-ioprofile
+ awk -f /tmp/pt-ioprofile.7393.52pjmz/summarize_strace.awk /tmp/pt-ioprofile.7393.52pjmz/tabulated_samples
+ '[' filename '!=' all ']'
+ head -n1 /tmp/pt-ioprofile.7393.52pjmz/summarized_samples
total filename
+ tail -n +2 /tmp/pt-ioprofile.7393.52pjmz/summarized_samples
+ sort -rn -k1
+ rm_tmpdir
+ '[' -n /tmp/pt-ioprofile.7393.52pjmz ']'
+ '[' -d /tmp/pt-ioprofile.7393.52pjmz ']'
+ rm -rf /tmp/pt-ioprofile.7393.52pjmz
+ PT_TMPDIR=
+ exit 0

$ ll /tmp/pt-ioprofile
-rw-r--r-- 1 yoku0825 yoku0825 128606368 Oct 17 12:48 /tmp/pt-ioprofile
lsofstraceはちゃんと取れているっぽい。
$ less /tmp/pt-ioprofile
+ local pid=27170
+ lsof -p 27170
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 27170 yoku0825 cwd DIR 253,0 4096 134572596 /usr/mysql/5.7.23/data
mysqld 27170 yoku0825 rtd DIR 253,0 4096 128 /
mysqld 27170 yoku0825 txt REG 253,0 686787152 201877015 /usr/mysql/5.7.23/bin/mysqld
..
strace: Process 27170 attached with 36 threads
[pid 27203] futex(0x7ff4ec03ded4, FUTEX_WAIT_PRIVATE, 347, NULL <unfinished ...>
[pid 27202] futex(0x7ff4ec03de44, FUTEX_WAIT_PRIVATE, 391, NULL <unfinished ...>
[pid 27201] futex(0x7ff4ec03ddb4, FUTEX_WAIT_PRIVATE, 455, NULL <unfinished ...>
..
じゃあまあなんか集計部分がおかしいのかな、と awkを叩いてみようと思うも
$ awk -f /tmp/pt-ioprofile.7393.52pjmz/tabulate_strace.awk /tmp/pt-ioprofile
awk: fatal: can't open source file `/tmp/pt-ioprofile.7393.52pjmz/tabulate_strace.awk' for reading (No such file or directory)
(・3・)アルェー
と思ったら、 bash -xの最後の方で /tmp/pt-ioprofile.7393.52pjmzを消してた。
どうやら一度テンポラリーディレクトリーにawkスクリプトを書き出した後にawk -fで食わせているっぽい。
rm_tmpdirから rm -rfの部分を消し去ってリトライ。
$ bash -x /usr/bin/pt-ioprofile --save-samples /tmp/pt-ioprofile
..
+ awk -f /tmp/pt-ioprofile.7897.sdNdwz/tabulate_strace.awk /tmp/pt-ioprofile
+ awk -f /tmp/pt-ioprofile.7897.sdNdwz/summarize_strace.awk /tmp/pt-ioprofile.7897.sdNdwz/tabulated_samples
..

$ ll /tmp/pt-ioprofile.7897.sdNdwz/
total 12
-rw-r--r-- 1 yoku0825 yoku0825 20 Oct 17 12:57 summarized_samples
-rw-r--r-- 1 yoku0825 yoku0825 3408 Oct 17 12:57 summarize_strace.awk
-rw-r--r-- 1 yoku0825 yoku0825 0 Oct 17 12:57 tabulated_samples
-rw-r--r-- 1 yoku0825 yoku0825 3547 Oct 17 12:57 tabulate_strace.awk

$ awk -f /tmp/pt-ioprofile.7897.sdNdwz/tabulate_strace.awk /tmp/pt-ioprofile
あれ何も起こらない…
比較用のCentOS 6.10では *_samplesも0バイトじゃないし、 awkの結果も返ってくる。
$ ll /tmp/pt-ioprofile.812.PmCXAO
total 164
-rw-r--r-- 1 root root 1765 Oct 17 12:59 summarized_samples
-rw-r--r-- 1 root root 3408 Oct 17 12:59 summarize_strace.awk
-rw-r--r-- 1 root root 154779 Oct 17 12:59 tabulated_samples
-rw-r--r-- 1 root root 3547 Oct 17 12:59 tabulate_strace.awk

$ awk -f /tmp/pt-ioprofile.812.PmCXAO/tabulate_strace.awk /tmp/pt-ioprofile
517 open 62 0 0.000032 /dev/urandom
517 read 62 32 0.000016 /dev/urandom
517 close 62 0 0.000015 /dev/urandom
517 open directory) 0 0.000730 /var/lib/mysql/mysqlslap/
517 open 62 0 0.000079 /var/lib/mysql/mysqlslap/db.opt
517 write 62 65 0.000024 /var/lib/mysql/mysqlslap/db.opt
..
ということで、 tabulate_strace.awkのどこかが悪そう。
…というのを頑張った結果、最初に書いたパッチにたどり着いたのでしたん。

Viewing all articles
Browse latest Browse all 581

Trending Articles