如题:

假设你已经熟悉了基本用法,知道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 高级用法:完整记录程序性能指标,并按照时间段对程序进行有针对性的性能分析的更多相关文章

  1. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  2. Spark性能优化指南——高级篇

    本文转载自:https://tech.meituan.com/spark-tuning-pro.html 美团技术点评团队) Spark性能优化指南——高级篇 李雪蕤 ·2016-05-12 14:4 ...

  3. Spark性能优化指南-高级篇(spark shuffle)

    Spark性能优化指南-高级篇(spark shuffle) 非常好的讲解

  4. 【转载】Spark性能优化指南——高级篇

    前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数 ...

  5. Spark性能优化指南——高级篇(转载)

    前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问 ...

  6. Spark性能优化指南-高级篇

    转自https://tech.meituan.com/spark-tuning-pro.html,感谢原作者的贡献 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作 ...

  7. [性能优化] perf

    运行时性能分析工具 wiki:https://en.wikipedia.org/wiki/Perf_(Linux) linux wiki:https://perf.wiki.kernel.org/in ...

  8. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  9. JVM性能优化, Part 2 ―― 编译器

    作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍).Eva Andreasson ...

随机推荐

  1. 基于mindwave脑电波进行疲劳检测算法的设计(4)

    上一次的实验做到可以从pc端读取到MindWave传输过来的脑电波原始数据了. 我是先定义一个结构体,该结构体对应保存所有能从硬件中取到的原始数据. struct FD_DATA { int batt ...

  2. 用H5上传文件

    //1,第一步读取用户选中的文件 <input type="file" accept="image/*" onchange = "selecte ...

  3. [Big Data - Kafka] Kafka设计解析(三):Kafka High Availability (下)

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  4. 《转》推荐几个精致的web UI框架

    1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...

  5. Android中获取应用程序(包)的信息-----PackageManager的使用

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagename ...

  6. ElasticStack系列之九 & master、data 和 client 节点

    在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题. 默认情况下,elasticsearch 集群中每个节点都有成为主节点的资格,也都存 ...

  7. idea 自动根据屏幕代码换行

    勾上即可 -- 建议不开启 有些时候从其他来源网站直接copy的代码文件会出现不勾选还会出现自动换行的情况 解决方法  新建文件  代码全部选剪过去

  8. Python3自定义json逐层解析器

    [本文出自天外归云的博客园] 用python3对json内容逐层进行解析,拿中国天气网的接口返回数据测试,代码如下: # -*- coding: utf-8 -*- import operator a ...

  9. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-12底层驱动之液晶画点驱动

    视频简介:该视频介绍iCore3应用开发平台中液晶驱动的方法. 源视频包下载地址:链接:http://pan.baidu.com/s/1qXQoOQo 密码:gvgo 银杏科技优酷视频发布区:http ...

  10. android平台的三个编译命令——make,mm,mmm

    在Android源码根目录下,执行以下三步即可编译android: 1.  build/envsetup.sh  #这个脚本用来设置android的编译环境; 2.  lunch  #选择编译目标 3 ...