多看书 少写文章
该工具在mac上使用需要自己编译
下载bootchart源码:bootchart-0.9.tar.bz2
编译需要ant,一下子需要更新homebrew,如果卡着换个网络试试。
brew install ant
进入源码目录
ant
编译生成bootchart.jar
之后可以丢到bin,
java -jar xxxx.jar 执行。
如果是linux,安装如下两个(暂时未验证 主力是mac)
sudo apt-get install pybootchartgui
sudo apt-get install bootchart
找不到请替换
sudo apt-get install systemd-bootchart
开启bootchart
adb shell touch /data/bootchart/enabled
之后重启设备会在/data/bootchart/发现这么一堆
直接adb shell 进去执行压缩。
tar -czf bootchart.tgz *
如果是mac则可以用busybox曲线救国(待验证 太久忘记了)
busybox tar -czf bootchart.tgz header proc_stat.log proc_ps.log proc_diskstats.log
接下来是文件bootchart.tgz转化成图片
如果是mac ,或者自己写个shell
java -jar bootchar.jar /path/to/bootchart.tgz
如果linux
bootchart xxx/ bootchart.tgz
### 报错处理
# 报错如下:
$ bootchart ./ bootchart.tgz
parsing './bootchart.tgz'
parsing 'header'
parsing 'proc_diskstats.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_stat.log'
parsing 'header'
parsing 'proc_diskstats.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_stat.log'
parsing 'bootchart.tgz'
parsing 'header'
parsing 'proc_diskstats.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_stat.log'
merged 0 logger processes
pruned 265 process, 0 exploders, 18 threads, and 2 runs
False
Traceback (most recent call last):
File "/usr/bin/bootchart", line 23, in <module>
sys.exit(main())
File "/usr/lib/python2.7/dist-packages/pybootchartgui/main.py", line 137, in main
render()
File "/usr/lib/python2.7/dist-packages/pybootchartgui/main.py", line 128, in render
batch.render(writer, res, options, filename)
File "/usr/lib/python2.7/dist-packages/pybootchartgui/batch.py", line 41, in render
draw.render(ctx, options, *res)
File "/usr/lib/python2.7/dist-packages/pybootchartgui/draw.py", line 282, in render
draw_chart(ctx, IO_COLOR, True, chart_rect, [(sample.time, sample.util) for sample in disk_stats], proc_tree)
File "/usr/lib/python2.7/dist-packages/pybootchartgui/draw.py", line 201, in draw_chart
yscale = float(chart_bounds[3]) / max(y for (x,y) in data)
ZeroDivisionError: float division by zero
原因:解析磁盘数据时,bootchart 默认的 /proc/diskstats 格式数据是14列的, 而我这边的环境是18列,所以解析失败,进而导致后面的除数为0 的错误,把这里改成真实数据的列数就好了;
解决方法:
打开:/usr/lib/python2.7/dist-packages/pybootchartgui/parsing.py
def _parse_proc_disk_stat_log(file, numCpu):
...
def is_relevant_line(linetokens):
--- return len(linetokens) == 14 and re.match(DISK_REGEX, linetokens[2])
+++ return len(linetokens) == 18 and re.match(DISK_REGEX, linetokens[2])
...