网站首页 > 技术文章 正文
热点查找-性能工具
一般服务器的操作系统选择Linux,本文针对Linux操作系统选择几款常用的性能工具简要介绍一下。
1 Gprof
Gprof是GUN编译器工具包提供的性能分析工具,gprof能够给出函数调用关系、调用次数、执行时间等信息。大多数Linux发行版默认都安装了gprof。
但是gprof在编译和链接阶段都需要添加-pg选项(pg表示产生的程序可以使用gprof分析),为GCC内嵌的功能,会自动在程序中插入一些代码以保存函数执行时的一些信息(执行时间、执行次数、调用关系等)。然后在正常运行时,程序会自动将获得的程序执行时信息输出到gmon.out文件中,再应用gprof命令处理程序和其输出的gmon.out文件,便会输出人工阅读的信息。
由于gprof需要添加编译选项,同时对于多线程支持不好。我在项目中没有使用gprof。
2 Intel VTune
VTune是Intel提供的用于分析和优化程序性能的工具,它能够帮助你确定程序的热点,帮助你找到导致性能不理想的原因,从而优化你的程序。
主要包括三个小工具:
(1)Performance Analyzer:性能分析,找到软件性能比较热的部分,一般也就是性能瓶颈的关键点。
(2)Intel Threading Checker:用于查找线程错误, 能够检测资源竞争、线程死锁等问题。
(3)Intel Threading Profiler:线程性能检测工具,多线程可能存在负载比平衡, 同步开销过大等线程相关的性能问题,该工具可以帮你发现每一个线程每一时刻的状态。
但是Intel VTune需要收费,这里推荐土豪可以使用。
3 Perf
perf是Linux内核 2.6.31之后支持的、用户空间的(Linux 内核分用户空间和内核空间,用户只能访问用户空间的数据、工具)、基于命令行的性能分析工具。perf 提供了一系列子命令。perf 能够统计剖分整个Linux系统。
perf 支持硬件和软件计数器,并且能够像 strace 一样跟踪内核调用。从 Linux 内核 3.14 开始,perf 还支持功耗剖分。
perf 支持下列子命令:
stat:此命令为常见性能事件提供整体数据,包括执行步骤和消耗所用的时间周期。
top:此命令执行与 top 工具相似的功能。它实时生成并显示性能计数器配置文件。
record:此命令将性能数据记录到随后可使用 perf report 分析的文件中。
report:此命令从文件中读取性能数据并分析记录数据
list:此命令列出特定机器上有效事件。这些事件因系统性能监控硬件和软件配置而异。
4 OProfile
OProfile 是一个全系统性能监控工具。它使用处理器的专业性能监控硬件来检索关于内核和系统可执行文件的信息,以便确定某些事件的频率,比如引用内存时,就接收第二级缓存请求数和硬件请求数。OProfile 也可用于确定处理器的使用率,并确定最常使用的应用程序和服务。
但 OProfile 有一些局限性:
性能监控样本可能不太准确。由于处理器可能无法执行指令,样本就会记录一个附近的指令,而不是记录触发中断的指令。
OProfile 希望程序多次启动和停止。这样的话多次运行得到的样本就可以累积,用户可能需要清除上一次运行的样本数据。
OProfile 集中识别 CPU 访问限制的进程问题。因此,对于等待锁定其他事件来识别睡眠状态的进程并无帮助。
- 上一篇: 算法练习题——位运算(位运算技巧)
- 下一篇: C++基础语法梳理:智能指针和强制类型转换运算符
猜你喜欢
- 2024-10-18 了解C语言中的操作符(c语言操作符怎么定义)
- 2024-10-18 20天轻松入门《C++第二章——程序设计基础》—3经坛教育
- 2024-10-18 C++中的volatile关键字(volatile关键字 c语言)
- 2024-10-18 C/C++软件开发证书怎么考?报考难度大吗?含金量高吗?
- 2024-10-18 c++数据类型(c++数据类型转换)
- 2024-10-18 C语言中实现边沿函数算法及应用,这是抛弃PLC留下的痛!
- 2024-10-18 C基础、经典问题:交换a、b值较好的方法?
- 2024-10-18 C++ 避免使用模块重新编译模板库(调用c++模块,不忽略异常)
- 2024-10-18 面试大厂c/c++后台开发岗,如何从技术层面上杀出重围?
- 2024-10-18 关于C语言交换两个数的实现方法以及个人心得
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)