如题:

假设你已经熟悉了基本用法,知道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. [docker]docker4种网络最佳实战

    参考: http://hicu.be/docker-container-network-types docker默认3中网络类型 参考: https://docs.docker.com/engine/ ...

  2. Socket网络编程--聊天程序(6)

    这一小节将增加一个用户的结构体,用于保存用户的用户名和密码,然后发给服务器,然后在服务器进行判断验证.这里就有一个问题,以前讲的就是发送字符串是使用char类型进行传输,然后在服务器进行用同样是字符串 ...

  3. 常用七种排序的python实现

    1 算法复杂度 算法复杂度分为时间复杂度和空间复杂度.其中, 时间复杂度是指执行算法所需要的计算工作量:而空间复杂度是指执行这个算法所需要的内存空间. 算法的复杂性体现在运行该算法时的计算机所需资源的 ...

  4. Diocp截图

    跑了个数据库的查询和插入,删除.     Http SVR DEMO http://123.232.98.202:8081/

  5. 项目中遇到的IE8浏览器访问页面过慢问题

    我目前所做的项目,由于一些控件的特殊需求,建议客户使用IE8浏览器,在测试一段时间之后,客户突然提出,IE8访问我们的系统时,界面加载非常缓慢.排查过服务器性能.网络连接等情况之后,在360浏览器访问 ...

  6. 【九天教您南方cass 9.1】 11 方格网土方计算

    同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取测量空间中. [点击索取cass教程]5元立得 (给客服说暗号:“ ...

  7. vscode忽略node_module

    1.文件 ---> 首选项  ---> 设置 英文版对应:File ---> Preferences-> User Settings 2.打开 setting.json 3.将 ...

  8. org.apache.http.TruncatedChunkException: Truncated chunk ( expected size: 47956; actual size: 35656)

    在使用httpcomponents-client-4.2.1时,任务运行一段时间就抛出以下一场 下面是异常的堆栈信息: org.apache.http.TruncatedChunkException: ...

  9. 【转】WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 菜单Menu的自定义样式: 右键菜单ContextMenu的自定义样式 ...

  10. Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...