perf抓取时系统crash的情况。找前同事了解到perf工具导致系统crash的一种情况,
perf工具默认是使用cycles,这个硬件事件是使用NMI,可能会导致内核错误。
之前文档上的perf命令更新下,指定使用软件事件cpu-clock(注意:不知道perf命令还有没有别的坑,请注意生产上谨慎使用)
perf record -p `pidof mysqld` -e cpu-clock -g -o /tmp/perf.data sleep 10
这两个事件的区别:
cpu-clock可以用来表示程序执行经过的真实时间,而无论CPU处于什么状态(Pn(n非0)或者是C状态);
而CPU cycles则用来表示执行程序指令花费的时钟周期数,如果CPU处于Pn(n非0)或者是C状态,则cycles的产生速度会减慢。
也即,如果你想查看哪些代码消耗的真实时间多,则可以使用cpu-clock事件;而如果你想查看哪些代码消耗的时钟周期多,则可以使用CPU cycles事件。
参考资料:
http://github.tiankonguse.com/blog/2016/03/29/perf-record.html