[性能优化] perf 高级用法:完整记录程序性能指标,并按照时间段对程序进行有针对性的性能分析
如题:
假设你已经熟悉了基本用法,知道perf是干嘛的,以及会用 perf top
[性能优化] perf
背景:目标程序在运行的某时间段内会出现性能下降,需要了解这个时间内,程序发生了什么。
方法:
1. 按时间轴记录下性能变化数据。
2. 同时记录下当时的perf数据,使用perf record
3. 按照时间轴进行对比,对特定时间段内的perf数据进行分析。使用perf report。
1. 因为perf data内目前不能记录wall clock time。所以需要保证同时启动(关闭)性能变化的记录程序和perf record。之后才能对应时间轴。
编译的时候最好加编译选项“” -O0 -ggdb“”
记录性能变化的脚本:(这个脚本是用来抽样检测性能数据的)
[root@vm perf-]# ../forward/forward.sh |tee perf.log
#! /bin/bash date
old_value=`/root/cli-client getPortStatus |awk -F '[=,]' '{if($12=="'\''all'\''") print $22}'`
old_date_value=`date +%s` while true :
do
sleep
value=`/root/cli-client getPortStatus |awk -F '[=,]' '{if($12=="'\''all'\''") print $22}'`
date_value=`date +%s`
conn_count=`/root/cli-client nlb_conn_count` x_value=`expr $value - $old_value`
x_date_value=`expr $date_value - $old_date_value` old_value=$value
old_date_value=$date_value output=`echo "scale=2; $x_value / $x_date_value" | bc -l`
echo -e "$date_value\t$output\t$conn_count"
done
perf record的用法:
对于多线程程序,找到要调试的线程id
[root@vm perf-]# top -n -H -p
运行perf:
T:保留时间戳。g:记录调用树。
[root@vmnlb perf-]# perf record -Tgs -t ,,,
perf record会在当前目录生成文件perf.data
查看时间轴: 可见: 时间为:79627到80301
[root@vm perf-]# perf script -i perf.data |head
lcore-slave- 79627.186181: cycles:
7fff8105ad5a native_write_msr_safe ([kernel.kallsyms])
7fff81032bfc intel_pmu_enable_all ([kernel.kallsyms])
7fff8102d284 x86_pmu_enable ([kernel.kallsyms])
7fff8115d4b7 perf_pmu_enable ([kernel.kallsyms])
7fff8102b459 x86_pmu_commit_txn ([kernel.kallsyms])
7fff8115e620 group_sched_in ([kernel.kallsyms])
7fff8115eabf __perf_event_enable ([kernel.kallsyms])
7fff81159be0 remote_function ([kernel.kallsyms])
7fff810e8a1d flush_smp_call_function_queue ([kernel.kallsyms])
[root@vmnlb perf-]# perf script -i perf.data |tail -n
lcore-slave- 80301.104199: cycles:
7fff8163ec99 _raw_spin_lock_irq ([kernel.kallsyms])
7fff810f236c acct_collect ([kernel.kallsyms])
7fff8108345f do_exit ([kernel.kallsyms])
分析对应了时间轴之后的,性能日志:(根据前文中的forward.sh作出的抽样数据,可以生成如下的频率图。)

使用 perf report:
--sort参数很重要,用来指定不同的统计维度,维度不同的时候,累计值也不同,所以如果选择了错误的维度,很可能忽略问题。
--no-children与--children是一对互逆的配置,可以影响统计排序,也很重要。参考:https://stackoverflow.com/questions/31567272/sorting-by-self-column-in-perf-report?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
[root@vm perf-]# perf report --time ,
[root@vm perf-]# perf report --time , -s sym
[root@vm perf-]# perf report --time , -s sym --no-children
[性能优化] perf 高级用法:完整记录程序性能指标,并按照时间段对程序进行有针对性的性能分析的更多相关文章
- 【转】【技术博客】Spark性能优化指南——高级篇
http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...
- Spark性能优化指南——高级篇
本文转载自:https://tech.meituan.com/spark-tuning-pro.html 美团技术点评团队) Spark性能优化指南——高级篇 李雪蕤 ·2016-05-12 14:4 ...
- Spark性能优化指南-高级篇(spark shuffle)
Spark性能优化指南-高级篇(spark shuffle) 非常好的讲解
- 【转载】Spark性能优化指南——高级篇
前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数 ...
- Spark性能优化指南——高级篇(转载)
前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问 ...
- Spark性能优化指南-高级篇
转自https://tech.meituan.com/spark-tuning-pro.html,感谢原作者的贡献 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作 ...
- [性能优化] perf
运行时性能分析工具 wiki:https://en.wikipedia.org/wiki/Perf_(Linux) linux wiki:https://perf.wiki.kernel.org/in ...
- 转载:SqlServer数据库性能优化详解
本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...
- JVM性能优化, Part 2 ―― 编译器
作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍).Eva Andreasson ...
随机推荐
- 对ThreadLocal实现原理的一点思考
前言 在<透彻理解Spring事务设计思想之手写实现>中,已经向大家揭示了Spring就是利用ThreadLocal来实现一个线程中的Connection是同一个,从而保证了事务.本篇博客 ...
- MXNET:监督学习
线性回归 给定一个数据点集合 X 和对应的目标值 y,线性模型的目标就是找到一条使用向量 w 和位移 b 描述的线,来尽可能地近似每个样本X[i] 和 y[i]. 数学公式表示为\(\hat{y}=X ...
- TCP/IP四层模型讲解笔记
本文转载自:http://www.vuln.cn/2041 OSI七层模型 表示层:用来解码不同的格式为机器语言,以及其他功能. 会话层:判断是否需要网络传输. 传输层:识别端口来指定服务器,如指 ...
- Git的使用(一)
最近在解除git的使用,开始觉得git某些地方还是挺方便的. 1.svn的话管理起来是比较方便,可是断网的话,会用不了 2.git的话,管理一些开源的东西比较方便,并且比较好管理日常写的demo程序, ...
- 【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用
实验现象: 利用Quartus内部组件生成锁相环,用SignalTap II进行校验. 核心代码: module pll( input clk_25m, output clk_100m, output ...
- CAP原理中的一致性
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...
- 关于Unity中ARPG游戏人物移动(专题十一)
ARPG:动作型角色扮演类游戏 大多数的ARPG游戏都是使用摇杆操作,以第三人称摄像机的方式来跟随主角,实际上人物只走八个方向,上,下,左,右,左上,左下,右下,右上 控制角色移动的思路1: 在ARP ...
- 内存溢出OutOfMemory
https://blog.csdn.net/hzy38324/article/details/76719105 https://blog.csdn.net/u010833547/article/det ...
- Rest风格理解
之前一直不理解restful风格,今天终于理解了些(20170527) 正常我们在浏览器的地址栏中输入的地址很多都是发起的,发起的都是get请求 通过ajax可以设置put请求,F12查看浏览器请求头 ...
- [转]Git忽略规则及.gitignore规则不生效的解决办法
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: # 此为注 ...