2017年12月12日星期二

Linux Memory

[这是大牛写的脚本](https://github.com/spicyjack/perl-scripts/blob/master/smaps.pl) 
[大牛的博客](http://bmaurer.blogspot.com/2006/03/memory-usage-with-smaps.html)

用这个工具需要安装  Linux-Smaps perl模块
[Linux-Smaps perl模块下载链接](https://metacpan.org/release/Linux-Smaps)
安装只需要三步就可以
perl Makefile.PL
make
make install

root@localhost perl-scripts-1]# perl smaps.pl `pidof mysqld`
VMSIZE:    3041284 kb
RSS:        287492 kb total
               920 kb shared
             10180 kb private clean
            276392 kb private dirty
PRIVATE MAPPINGS
     vmsize   rss clean   rss dirty   file
  123796 kb        0 kb   123796 kb
 1823576 kb        0 kb    76108 kb
   52096 kb        0 kb    52040 kb   [heap]
   18400 kb        0 kb     7800 kb
   32772 kb        0 kb     5980 kb
   12440 kb        0 kb     2128 kb
   10240 kb        0 kb     2048 kb
   10240 kb        0 kb     2048 kb
    2000 kb        0 kb     1744 kb
    1656 kb      216 kb      532 kb   /usr/local/mysql/bin/mysqld
     632 kb        0 kb      492 kb
     420 kb        0 kb      412 kb
     280 kb        0 kb      272 kb
     280 kb        0 kb      224 kb
     884 kb        0 kb      124 kb
      92 kb        0 kb       88 kb   [stack]
     144 kb        0 kb       32 kb
     132 kb        0 kb       28 kb
   10240 kb        0 kb       28 kb
   10240 kb        0 kb       28 kb
   10240 kb        0 kb       28 kb
     256 kb        0 kb       28 kb
      28 kb        0 kb       28 kb   /usr/lib64/libstdc++.so.6.0.13
   10240 kb        0 kb       16 kb
   10240 kb        0 kb       16 kb
      16 kb        0 kb       16 kb   /lib64/libc-2.12.so
      16 kb        0 kb       16 kb
   10240 kb        0 kb       12 kb
   10240 kb        0 kb       12 kb
      84 kb        0 kb       12 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
   10244 kb        0 kb        8 kb
   10240 kb        0 kb        8 kb
       8 kb        0 kb        8 kb   /lib64/libc-2.12.so
       8 kb        0 kb        8 kb   /usr/lib64/libstdc++.so.6.0.13
     132 kb        0 kb        4 kb
     132 kb        0 kb        4 kb
     132 kb        0 kb        4 kb
     132 kb        0 kb        4 kb
       4 kb        0 kb        4 kb   /usr/local/mysql/lib/plugin/keyring_file.so
       4 kb        0 kb        4 kb   /lib64/libnss_files-2.12.so
       4 kb        0 kb        4 kb   /lib64/libnss_files-2.12.so
       4 kb        0 kb        4 kb   /lib64/libfreebl3.so
       4 kb        0 kb        4 kb   /lib64/libfreebl3.so
       4 kb        0 kb        4 kb   /lib64/libgcc_s-4.4.7-20120601.so.1
       4 kb        0 kb        4 kb   /lib64/libm-2.12.so
       4 kb        0 kb        4 kb   /lib64/libm-2.12.so
       4 kb        0 kb        4 kb   /lib64/librt-2.12.so
       4 kb        0 kb        4 kb   /lib64/librt-2.12.so
       4 kb        0 kb        4 kb   /lib64/libdl-2.12.so
       4 kb        0 kb        4 kb   /lib64/libdl-2.12.so
       4 kb        0 kb        4 kb   /lib64/libcrypt-2.12.so
       4 kb        0 kb        4 kb   /lib64/libcrypt-2.12.so
       4 kb        0 kb        4 kb   /lib64/libaio.so.1.0.1
       4 kb        0 kb        4 kb   /lib64/libpthread-2.12.so
       4 kb        0 kb        4 kb   /lib64/libpthread-2.12.so
      16 kb        0 kb        4 kb
      20 kb        0 kb        4 kb
       4 kb        0 kb        4 kb   /lib64/ld-2.12.so
       4 kb        0 kb        4 kb   /lib64/ld-2.12.so
       4 kb        0 kb        4 kb
   23312 kb     9380 kb        0 kb   /usr/local/mysql/bin/mysqld
      48 kb       44 kb        0 kb   /usr/local/mysql/lib/plugin/keyring_file.so
    1576 kb        8 kb        0 kb   /lib64/libc-2.12.so
      88 kb       28 kb        0 kb   /lib64/libgcc_s-4.4.7-20120601.so.1
     524 kb        4 kb        0 kb   /lib64/libm-2.12.so
     928 kb      484 kb        0 kb   /usr/lib64/libstdc++.so.6.0.13
       4 kb        4 kb        0 kb   /lib64/libaio.so.1.0.1
      92 kb       12 kb        0 kb   /lib64/libpthread-2.12.so

SHARED MAPPINGS
     vmsize   rss clean   rss dirty   file
    1576 kb      624 kb        0 kb   /lib64/libc-2.12.so
     128 kb      116 kb        0 kb   /lib64/ld-2.12.so
      92 kb       72 kb        0 kb   /lib64/libpthread-2.12.so
      52 kb       24 kb        0 kb   /lib64/libnss_files-2.12.so
     524 kb       20 kb        0 kb   /lib64/libm-2.12.so
      28 kb       20 kb        0 kb   /lib64/librt-2.12.so
      88 kb       16 kb        0 kb   /lib64/libgcc_s-4.4.7-20120601.so.1
       8 kb        8 kb        0 kb   /lib64/libfreebl3.so
       8 kb        8 kb        0 kb   /lib64/libdl-2.12.so
      28 kb        8 kb        0 kb   /lib64/libcrypt-2.12.so
       4 kb        4 kb        0 kb   [vdso]

2017年12月8日星期五

MySQL FlameGraph

MySQL  FlameGraph

https://poormansprofiler.org/
http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#perf
https://github.com/brendangregg/FlameGraph/
http://queue.acm.org/detail.cfm?id=2927301

method1 gdb
https://github.com/brendangregg/FlameGraph/blob/master/stackcollapse-gdb.pl

#!/bin/sh
for x in $(seq 1 5)
do
     gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p `pidof mysqld` >> gdb.txt
     sleep 0.01
done

cat gdb.txt | perl stackcollapse-gdb.pl > out.gdb-folded
perl flamegraph.pl out.gdb-folded > gdb-mysql.svg


method2 perf
https://github.com/brendangregg/FlameGraph/blob/master/stackcollapse-perf.pl
https://github.com/torvalds/linux/tree/master/tools/perf/Documentation

perf record -a -g -F 997 --pid `pidof mysqld` sleep 60
perf script | /home/soft/FlameGraph/stackcollapse-perf.pl > out.perf-folded
/home/soft/FlameGraph/flamegraph.pl out.perf-folded > perf-mysql.svg



Off-CPU
http://www.brendangregg.com/blog/2015-02-26/linux-perf-off-cpu-flame-graph.html
http://oliveryang.net/2015/07/linux-scheduler-profiling-2/
https://github.com/openresty/stapxx
https://github.com/openresty/nginx-systemtap-toolkit


perf script -F comm,pid,tid,cpu,time,period,event,ip,sym,dso | awk '
    NF > 4 { exec = $1; period_ms = int($5 / 1000000) }
    NF > 1 && NF <= 4 && period_ms > 0 { print $2 }
    NF < 2 && period_ms > 0 { printf "%s\n%d\n\n", exec, period_ms }' | \
    /home/soft/FlameGraph/stackcollapse.pl | \
   /home/soft/FlameGraph/flamegraph.pl --countname=ms --title="Off-CPU Time Flame Graph" --colors=io > offcpu.svg