在收集trace数据前请先注意以下原则:
① 收集trace数据会对当前系统的负载有影响,在CPU已经达到99%时,再收集trace有可能把操作系统搞夯。
② 一定要等到问题重现时收集trace,由于trace产生的数据量巨大,因此要收集有效时间段的trace。如果不确定问题什么时候重现,可以写个判断脚本,收集循环trace。
③ 用root用户进行trace收集
④ 需要预估trace数据的大小,然后根据预估的空间,在操作系统上找一个空间较大的地方存放数据。trace数据的大小可以用下列公式算出:
预估数据大小=逻辑CPU的个数 * 10MB
(其中逻辑CPU的个数可以用vmstat | grep -i lcpu命令查看)
在了解上述原则后,我们开始收集trace数据。
trace -anl -C all -T 20M -L 40M -o /bigFS/trace.raw sleep 10 trcstop |
在执行完上述收集命令后,会生成trace的raw文件。
下面对trace数据进行转换:
trcrpt -r -C all trace.raw > trace.r |
再用curt进行数据处理:
curt -i trace.r -o curt.out -pest |
此时产生一个curt.out文件,可以直接进行阅读。首先可以从“System Summary”字段看到各种类型的进程分别占用CPU的比例。
然后从“Application Summary”可以看到应用占用CPU的排名。
也可以从“System Calls Summary”可以看到系统函数调用排名情况。