在生产环境中,CPU 跑高时,因为偶发或者持续时间短等原因,无法有效抓取到相关问题信息,该方法主要是借助 perf 采集系统的线程执行情况,从而追溯问题期间的各个进程或线程的 CPU 使用情况。
具体步骤如下:
部署 perf 采集任务
nohup perf record -e cpu-clock -g -T -k CLOCK_REALTIME -F 10 -o /xxxx/xxx.perf --switch-output=1M >/dev/null 2>&1 &-F 10为采集频率,此处为1秒10次,采集频率不建议设置过高,以免对系统负载产生影响,同时建议在测试环境对perf采集的负载进行评估,-o为采集文件的存放位置。
等待问题出现后,查看通过如下方式读取问题发生时间点的线程调用情况。
perf script -i perf.file perf script -F comm,pid,tid,time -i perf.file打开后,时间展示格式为 unix timestamp,需要确认问题发生时间点的 timestamp,然后观察 CPU 跑高出现时,线程的调用情况,确认是否存在较多的系统调用(高并发的文件读取等操作)操作或者比较可疑的系统调用情况,确认问题原因。
适用版本
OceanBase 数据库所有版本。