Linux性能优化--实用工具:性能工具助手

8.0 概述

本章介绍一些在Linux系统上可用的实用程序,它们能够加强性能工具的有效性和可用性。实用工具本身不是性能工具,但是当它们与性能工具一起使用时,它们可以帮助完成如下功能:自动执行繁琐的任务、分析性能统计数据,以及创建性能工具友好的应用程序。
阅读本章后,你将能够:

  1. 定期显示并收集性能数据(bash、watch)。
  2. 记录性能调查过程中所有的命令以及显示的输出(tee、script)。
  3. 导入、分析性能数据并将其图形化(gnumeric)。
  4. 确定应用程序使用的库(ldd)。
  5. 确定链接库中有哪些函数(objdump)。
  6. 研究应用程序的运行时特征(gdb)。
  7. 创建性能工具/调试友好的应用程序(gcc)。

8.1性能工具助手

Linux有着丰富的工具,这些工具一起使用比起单个使用之和的功能更强大。性能工具也是一样的,虽然可以单独使用,但是它们与其他Linux工具结合起来就能够显著提升其有效性和易用性。

8.1.1自动执行和记录命令

如同前面章节所述,性能调查中最有价值的步骤之一就是保存在调查过程中发出的命令和产生的结果。这使得你可以在之后对它们进行回顾并寻求新的见解。为了帮助实现这个目的,Linux提供了两个命令:tee和script,前者能将工具的输出保存为文件,后者能记录每一个按键和屏幕上的每一个输出。这些信息可以保存下来,便于之后查看或者创建脚本来自动执行测试。
自动执行命令很重要,因为它可以减少出错的机会,使你在思考问题时不需记住所有的细节。在你一次性键入又长又复杂的命令行之后,bash shell和watch命令都可以让你周期性地自动执行这些命令。在你保证了命令行的正确性后,bash和watch能够周期性地自动执行它们,不需要再次键入。

8.1.2性能统计信息的绘图与分析

除了记录与自动化工具之外,Linux还提供了强大的分析工具帮助你理解性能统计数据的含义。尽管大多数性能工具可以把性能统计数据输出为文本,但是想要发现其中的模式和随时间变化的趋势并不总是件容易的事儿。Linux提供的gnumeric电子表格很强大,它可以对性能数据进行导入、分析和绘图。当你绘制数据图时,性能问题的原因可能会变得明晰,或者至少能揭示调查的新角度。

8.1.3调查应用程序使用的库

还有一些Linux的工具能使你确定应用程序使用了哪些库,以及显示给定库提供的所有函数。ldd命令给出一个特定应用程序使用的全部共享库的列表。在你想要跟踪被应用程序使用的库的数量和位置时,这个命令很有用。Linux中还有一个命令objdump,它可以在指定库或应用程序中搜索并显示其提供的全部函数。ltrace只能给出一个应用程序调用函数的名称,但是结合命令ldd和objdump,你就能够利用ltrace的输出来确定指定函数属于哪个库。

8.1.4创建和调试应用程序

最后,Linux还为你提供了能够创建性能工具友好型应用程序的工具,以及交互式调试和调查运行中应用程序属性的工具。GNU编译器集(gcc)可以在应用程序中插入调试信息,以帮助oprofile找出某个具体性能问题对应的代码行和源文件。此外,GNU调试器(gdb)还可以用来查找被各种性能工具默认不可得的应用程序的运行时信息。

8.2 工具

本节讨论的工具一起使用时,可以极大地提高前面章节介绍的性能工具的有效性和易用性。

8.2.1 bash

bash是默认的Linux命令行shell,在你每次与Linux命令行交互时,最有可能使用它。bash通常有一个功能强大的脚本语言来创建shell脚本。不过这个脚本语言也可以从命令行调用,从而使你在性能调查过程中,能轻松地将一些比较繁琐的任务进行自动化。

8.2.1.1性能相关的选项

bash有一组命令可以一起使用,来周期性地运行特定命令。大多数Linux用户都把bash作为默认的shell,因此,只要登录到一台机器或打开一个终端就会出现bash提示。如果你没有使用bash,也可以键入bash来调用它。
有了bash命令提示符后,你可以输入一系列的bash脚本命令来自动连续地执行特定命令。在使用特定命令周期性提取性能统计数据的情况下,这个功能非常有用。表8-1给出了这些脚本选项。
在这里插入图片描述
bash极其灵活,它记录在bash手册中。虽然bash非常复杂,但是在使用它之前并不需要完全掌握它。

8.2.1.2 用法示例

虽然有些性能工具,如vmstat和sar,能周期性地更新性能统计信息,但是其他的命令,比如ps和ifconfig则不能。bash可以调用诸如ps或ifconfig命令来周期性地显示它们的统计数据。例如,在清单8.1中,我们要求bash在条件为true时执行while循环。由于true命令总是为真,因此这个while循环永远都不会结束。接着,在do命令后启动每次迭代之后都要执行的命令,这些命令要求bash休眠1秒钟,然后运行ifconfig来抽取eth0控制器的性能信息。不过,我们只关心接收数据包,因此,我们用grep搜索并显示字符串为“RX packets”的ifconfig输出。最后,执行done命令来告诉bash循环完成。由于true命令总是返回真,所以,该循环将一直执行直到用组合键终止它。
在这里插入图片描述
利用清单8.1的bash脚本,可以查看到按秒更新的网络性能统计信息。同样的循环还可以用于监控其他的事件,只要将ifconfig命令修改为其他的命令即可,而通过修改休眠数值也能够改变更新时间间隔。这个简单的循环容易直接在命令行中键入,并且能够自动显示任何你感兴趣的性能统计数据。

8.2.2 tee

tee是一个简单的命令,可以将命令的标准输出保存为文件并同时进行显示。在想要保存并同时查看性能工具输出的时候,tee是很有帮助的。比如,正在监控一个实时系统的性能统计信息的同时,保存这些数据以备将来对它们进行分析。

8.2.2.1性能相关的选项

tee的调用命令行如下:
I tee [-a] [file]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

资源受限MCU Flash空间占用优化

资源受限MCU Flash空间占用优化步骤: 避免重复功能,排查软件工程中,重复功能的代码片段,抽象出来,重新进行封装;减少内联函数inline,内联函数过大且过多的调用无疑会增加代码量,占用…

二叉树的三种遍历方式的本质

二叉树的定义就不在这里多说了,下面这个图就是一个简单的二叉树: 二叉树的三种遍历方式: 前序遍历:头左右,也就是先头后左再右:1245367 public static void prePrint(BinaryTreeNode root) {if (root ! n…

BIM轻量化引擎的国内外发展现状

随着BIM技术的不断发展,对BIM技术应用要求已不局限于模型及基于模型的应用,其在经历了方案展示、BIM建模及应用两个阶段后,逐步向基于BIM平台的信息化管理模式升级,“模型是基础,管理是核心”的理念成为BIM应用的主流方…

一些FreeRTOS系统的usb命令使用方法

在全志R128开发过程中总结一些RTOS系统的usb命令使用方法,以下命令在所有RTOS平台(MELIS/FREERTOS)都可以使用 通过menuconfig打开usb模块功能 RTOS通过usb命令集成了测试用例。通过如下命令即可显示支持的功能: //输入如下命令…

rsyslog实现将日志存储到mysql中

​ 前提:准备好msql server或mariadb server; ​ 1、安装rsyslog连接至mysql server的驱动模块; [13:24 rootcentos6.8~]# yum install -y rsyslog-mysql [13:24 rootcentos6.8~]# rpm -ql rsyslog-mysql /lib64/rsyslog/ommysql.so /usr/…

6.strchr函数和strrchr函数

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h>/*char *strchr(char const *str, int ch);strchr在字符串中str中查找字符ch第1次出现的位置&#xff0c;找到后函数返回一个指向该位置的指针&#xff1b;如果该字符并不存在于字符串中&a…

EFLK与logstash过滤

目录 一、Filebeat工作原理&#xff1a; 二、为什么要使用Filebeat&#xff1a; 三、Filebeat和Logstash的区别&#xff1a; 四、logstash 的过滤插件&#xff1a; 五、FilebeatELK 部署&#xff1a; 1. 安装filebeat&#xff1a; 2. 设置 filebeat 的主配置文件&#xff1…

RIAC-V架构开发——ecall函数调用分析

1、sbi_ecall函数功能 &#xff08;1&#xff09;sbi_ecall函数是内核调用SBI的接口&#xff0c;在RISC-V架构中定义了SBI规范&#xff0c;内核通过ecall指令来调用SBI接口进而操作硬件&#xff1b; &#xff08;2&#xff09;SBI规范参考官网文档《riscv-sbi.pdf》&#xff1b…

qt_vs_tools 设置

1. 设置qt->general->最后面的QT/MSBUILD 该路径在QT/MSBUILD的本机路径 &#xff08;%LOCALAPPDATA%\QtMsBuild&#xff09; C:\Users\pc\AppData\Local\QtMsBuild 设置后需重启vs才能生效 2. 环境变量设置 path中需添加qt安装路径 E:\ProgramFiles\Qt\6.5.1\msvc201…

Spring Boot Bean 注入的常用方式教程

Spring Boot Bean 注入是一种将依赖对象引入到应用程序组件中的机制&#xff0c;它有助于实现松耦合和可测试的代码。这种注入方式允许我们将依赖关系委托给 Spring 容器来管理&#xff0c;从而提高了代码的可维护性和可读性。Spring Boot 提供了多种 Bean 注入方式&#xff0c…

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-ChatGLM2部署UbuntuCuda11显存24G实战方案 自从chatGPT掀起的AI大模型热潮以来&#xff0c;国内大模型研究和开源活动&#xff0c;进展也如火如荼。模型越来越大&#xff0c;如何在小显存部署和使用大模型&#xff1f; 本实战专栏将评估一系列的开源模型&#xf…

CICD:Circle CI 实现CICD

持续集成解决什么问题 提高软件质量效率迭代便捷部署快速交付、便于管理 持续集成&#xff08;CI&#xff09; 集成&#xff0c;就是一些孤立的事物或元素通过某种方式集中在一起&#xff0c;产生联系&#xff0c;从而构建一个有机整体的过程。 持续&#xff0c;就是指长期…

element ui el-table表格复选框,弹框关闭取消打勾选择

//弹框表格复选框清空 this.$nextTick(()>{this.$refs.table.clearSelection();})<el-table ref"table" v-loading"crud.loading" :header-cell-style"{ color: #FFF, background: #333 }":cell-style"{ color: #FFF, background: #3…

Java基础--阳光总在风雨后,请相信彩虹

1、今日任务 JAVA SE-韩顺平视频教程–30p以上&#xff08;今天得50p以上因为是基础&#xff09;计算机基础八股记忆总结刷题&#xff08;两题&#xff09;可以先用python 1、SSM ssm->Spring&#xff08;轻量级的文本开发框架&#xff09;/SpringMVC&#xff08;分层的w…

前端面试题个人笔记(后面继续更新完善)

文章目录 填空题部分简答题部分 if有好答案请各位大佬们在底下评论上&#xff0c;感谢 填空题部分 1、常见的css选择器 2、getElementById获取元素的&#xff08;DOM&#xff09;对象 简答题部分 1、介绍一下你对RESTful API的理解以及它的优势&#xff1f; 答&#xff1a; …

Android自定义AppGlideModule,DataFetcher ,ModelLoaderFactory,ModelLoader,Kotlin(1)

Android自定义AppGlideModule,DataFetcher ,ModelLoaderFactory,ModelLoader,Kotlin(1) 假设实现一个简单的功能&#xff0c;对传入要加载的path路径增加一定的筛选、容错或“重定向”&#xff0c;需要自定义一个模型&#xff0c;基于这个模型&#xff0c;让Glide自动匹配模型…

探索RPA流程自动化在不同行业的应用案例

随着数字化的推进&#xff0c;企业建设了大量的业务系统&#xff0c;跨系统的业务流程越发复杂&#xff0c;业务孤岛、 流程孤岛、数据孤岛也随之出现&#xff0c;产生了大量需要人工执行的重复性系统操作流程。而使用RPA能将员工从大量的、重复的、高耗时的工作中解放出来&…

【【萌新的SOC学习之AXI DMA环路测试介绍】】

萌新的SOC学习之AXI DMA环路测试介绍 AXI DMA环路测试 DMA(Direct Memory Access&#xff0c;直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存&#xff0c;而不需中央处理器&#xff08;CPU&#xff09;介入处…

修改Grafana自动刷新时间为1s

仪表盘设置了1s自动刷新&#xff0c;但是Grafana默认的刷新时间最低是5s&#xff0c;我们需要修改下Grafana的配置文件 grafana.ini配置文件&#xff1a; [dashboards] # Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1 # 要保留的仪表板版本号…

从零开始的LINUX(二)

1.alias: 用法&#xff1a;取别名&#xff0c;此时code1是code的别名&#xff0c;对code1进行操作和对code进行操作结果一致。 如果原本文件名不存在&#xff0c;仍可以正常运行指令&#xff0c;不会报错。 2.stat 显示指定文件或目录的状态、属性。 3.touch 当文件名不存在的…