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

news2024/11/19 14:42:41

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.coloradmin.cn/o/1099173.html

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

相关文章

【机器学习】逻辑回归

文章目录 逻辑回归定义损失函数正则化 sklearn里面的逻辑回归 逻辑回归 逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法。 线性回归是机器学习中最简单的的回归算法&#…

基本分段存储管理方式(分段,段表,地址转换以及与分页管理对比)

1.分段 1.进程的地址空间: 按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名 (在低级语言中,程序员使用段名来编程),每段从0开始编址. 2.内存分配规则: 以段为单位进行分配,每个段在内存中占据…

BIM轻量化技术简介

BIM轻量化技术是指在工程建筑的BIM模型建立之后(利用专业的BIM建模软件,比如Autodesk Revit, Bentley MicroStation, DS Catia等),通过对BIM模型的压缩处理等技术手段,让BIM可以在各类WEB浏览器、移动App上被使用的技术…

【网络协议】聊聊DHCP和PXE 工作原理

DHCP 动态主机配置协议 对于每个主机来说,只要连接了网络,那么就会配置一个IP地址,那么这个IP地址,如果是手动配置的话,对于公司内部的人员来说都要找IT进行配置,这个太浪费人力物力了,所以解决…

【软件设计师】面向对象类图的六种关系

面向对象类图的六种关系(继承、实现、依赖、关联、聚合、组合) 1、泛化(继承)2、实现3、依赖4、关联5、聚合6、组合 面向对象类图的六种关系(继承、实现、依赖、关联、聚合、组合) 进行面向对象设计时&…

为什么要做服务器监控?

应用程序一般都是在服务器上运行,可以这么说,服务器就是一家公司的全部,因此,服务器必须要监控,来确保性能和正常运行。 如果服务器宕机,那会导致很多问题,会给公司带来巨大的损失,…

[论文精读]Semi-Supervised Classification with Graph Convolutional Networks

论文原文:[1609.02907] Semi-Supervised Classification with Graph Convolutional Networks (arxiv.org) 论文代码:GitHub - tkipf/gcn: Implementation of Graph Convolutional Networks in TensorFlow 英文是纯手打的!论文原文的summari…

小黑子—MyBatis:第五章

MyBatis入门5.0 十三 小黑子的MyBatis高级映射及延迟加载13.1 多对一映射13.1.1 实体类关系怎么设计13.1.2 第一种方式:级联属性映射13.1.2 第二种方式 association 关联13.1.3 第三种方式 分步查询13.1.3 延迟加载 13.2 一对多映射13.2.1 一对多的映射原理13.2.2 第…

lv8 嵌入式开发-网络编程开发 18 广播与组播的实现

目录 1 广播 1.1 什么是广播? 1.2 广播地址 1.3 广播的实现 2 组播 2.1 分类的IP地址 2.2 多播 IP 地址 2.3 组播的实现 1 广播 1.1 什么是广播? 数据包发送方式只有一个接受方,称为单播 如果同时发给局域网中的所有主机&#xff0…

Python浏览器自动化

如果你正在进行手机爬虫的工作,并且希望通过模拟浏览器行为来抓取数据,那么Pyppeteer将会是你的理想选择。Pyppeteer是一个强大的Python库,它可以让你控制浏览器进行自动化操作,如点击按钮、填写表单等,从而实现数据的…

以数智化指标管理,驱动光伏能源行业的市场推进

近年来,碳中和、碳达峰等降低碳排放、提升环境健康度的政策和技术改进正在不断地被社会所认可和引起重视,也被越来越多的企业在生产运营和基础建设中列为重要目标之一。而光伏能源行业作为全球绿色能源、新能源的优秀解决方案,充分利用太阳能…

Linux小程序---进度条

一&#xff1a;\r 和 \n \r --- 回车 --- 使光标回到这一行的开头 \n --- 换行 --- 会来到下一行与之平行的位置 缓冲区的问题&#xff1a; <1>: \n 的示例 正常输出 hehehehe 。 <2>: \r 的示例 为了方便观察&#xff0c;加入一个 sleep &#xff08;休眠函数…

[GSEP202306 一级] C++ 时间规划

题目描述 小明在为自己规划学习时间。现在他想知道两个时刻之间有多少分钟&#xff0c;你通过编程帮他做到吗? 输入格式 输入4行&#xff0c;第一行为开始时刻的小时&#xff0c;第二行为开始时刻的分钟&#xff0c;第三行为结束时刻的小时&#xff0c;第四行为结束时刻的分…

新能源电池试验中准确模拟高空环境大气压力的解决方案

摘要&#xff1a;针对目前新能源电池热失控和特性研究以及生产中缺乏变环境压力准确模拟装置、错误控制方法造成环境压力控制极不稳定以及氢燃料电池中氢气所带来的易燃易爆问题&#xff0c;本文提出了相应的解决方案。方案的关键一是采用了低漏率电控针阀作为下游控制调节阀实…

MySQL锁学习笔记

锁 事务的隔离性由锁来实现。 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;比如订单、金额等&#xff09;&#xff0c;我…

第二届中国未来交通产业发展峰会在深举办 聚焦智能网联、低空经济

智慧交通、低空飞行、自动驾驶……交通产业“未来已来”。10月12日&#xff0c;2023第二届中国未来交通产业发展峰会在深圳成功举办。本次峰会是国内聚焦高级别智能网联、低空产业、智慧物流、新能源和交通装备发展的高水平行业盛会&#xff0c;为行业搭建上下游沟通交流的广阔…

编译链接(Compile Link)

文章目录 前言一、翻译环境1、概念2、翻译环境的组成3、什么是编译链接&#xff1f; 二、编译1、编译的阶段2、预编译3、编译1、什么是语法分析&#xff1f;2、什么是词法分析&#xff1f;3、什么是语义分析&#xff1f;4、什么是符号汇总&#xff1f; 4、汇编1、符号表展示 三…

逼近5%!本土供应商挑战智能驾驶SoC主力份额,这三家企业率先入列

随着汽车行业迈进电动化、智能化周期&#xff0c;动力电池&#xff08;满足动力&#xff09;和芯片&#xff08;满足算力&#xff09;两个核心赛道陆续刮起「中国」旋风。 其中&#xff0c;中国动力电池厂商无论是在中国还是全球&#xff0c;市场份额逐步赶超日韩&#xff0c;…

11-k8s-service网络

文章目录 一、网络相关资源介绍二、开启ipvs三、nginx网络示例四、pod之间的访问示例五、service反向代理示例 一、网络相关资源介绍 Servcie介绍 Service是对一组提供相同功能的Pods的抽象&#xff0c;并为它们提供一个统一的入口。借助Service&#xff0c;应用可以方便的实现…

C++继承重要知识点总结(上)

目录 一.前言 二.继承机制 三.父子类赋值兼容规则 四.继承中的作用域 五.子类的默认成员函数 1.构造函数 2.拷贝构造函数 3.赋值重载函数 4.析构函数 一.前言 继承作为C的三大特性之一&#xff0c;其重要性不言而喻&#xff0c;只有学好了继承才能为后面的多态打下基础…