[性能优化] 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 ...
随机推荐
- Cubieboard A10 安装Nand系统,配置nginx,php,mysql,samba详细教程
安装前置条件 1.下载win32diskimager-v0.7-binary.zip 2.下载debian_wheezy_armhf_v1_mele.zip 3.下载cubie_nand_uboot_ ...
- [svc]二三层数据格式&&三层数据如何匹配路由
网络知识拾遗 tcpip的4&7层模型 PDU数据包在不同层的不同称呼 物理层(一层)PDU指数据位(Bit). 数据链路层(二层)PDU指数据帧(Frame). 网络层(三层)PDU指数据包 ...
- 9patch图的尺寸尽量为偶数
美工做了一张.9的背景图,宽度110*80 像素,描点如下: 放到720p的智能电视上观看,总感觉怪怪的.仔细观看可以发现,前景图总是不能完全的覆盖掉背景图.总有那么一个像素的点多余出来,如图所示: ...
- C#基础回顾:正则表达式-转
写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相信做软件开发的朋友或多或少 ...
- SSM框架搭建最新教程(超详细)
个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想.实践出真知. 1.基本概念 1.1.Spring Spr ...
- react学习笔记(二)编写第一个react组件
继续上一节课的内容,打开App.js:会看到如下代码: import React, { Component } from 'react'; //在此文件中引用React,以及reat的组件类 imp ...
- .bat文件调用java类的main方法
此处记录一个小例子,备用,说不定哪天写小工具时会用到. @echo on set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_43 set classpath=. ...
- iOS mac终端下的SQL语句
本文转载至 http://blog.csdn.net/majiakun1/article/details/41281801 我们都知道数据库的创建可以借助图形化的数据库工具软件,但也可以在Mac终端下 ...
- Excel VBA 教程
https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.acc ...
- css---颜色过渡渐变
CSS---颜色过渡渐变 <!doctype html> <html lang="en"> <head> <meta charset=&q ...