Linux性能优化--性能工具:下一步是什么

13.0 概述

本章是对一些事情的思索,包括:Linux性能工具的当前状态,哪些仍需要改进以及为什么Linux是当前一个相当不错的进行性能调查的平台。
阅读本章后,你将能够:

  1. 了解Linux性能工具箱的漏洞,以及一些理想的解决方案。
  2. 了解Linux作为性能调查平台的优势。

13.1Linux工具的现状

本书介绍了目前的Linux性能工具,以及怎样单独和一起使用它们来解决性能问题。就Linux的各方面而言,这些性能工具一直在发展,因此进行问题调查时,不断查看性能工具的帮助页或文档以确定其用法是否发生变化是一个好习惯。性能工具的基本功能很少改变,但常常会增加一些新功能,因此,对特定工具查看其最新发布的说明和文档是很有帮助的。

13.2Linux还需要什么样的工具

当我们了解一些Linux性能工具时,我们看到了整体性能调查功能中的一些漏洞。有些漏洞是由于内核限制造成的,有些漏洞则仅仅是由于没人编写一个工具来解决这个问题。但是,填补这些漏洞会让调查和修复Linux性能问题变得容易得多。

13.2.1漏洞1:性能统计信息分散

一个明显的漏洞是Linux没有一个单一的工具为特定进程提供所有的相关性能统计信息。在原来的UNIX中,ps可以填补这一漏洞,在Linux中它也很不错,但却不包含其他商业UNIX实现提供的全部统计信息。有些统计信息对追踪性能问题是非常有价值的,比如inblk(读入的I/O块)和oublk(写出的I/O块),它们表示的是一个进程使用的磁盘I/O量;vcsw(自愿的上下文切换)和invcsw(非自愿的上下文切换),它们通常表示一个进程进行CPU上下文切换;msgrcv(从通道和套接字接收的消息)和msgsnd(从通道和套接字发送的消息),它们显示的是一个应用程序使用的网络和通道I/O量。一个理想工具应加上所有这些统计数据,并将迄今为止提到的许多性能工具(包括oprofile、top、ps、strace、Itrace 和/proc文件系统)的功能组合到一个单一的应用程序中。用户应能在进程上使用这个单一的应用程序,抽取所有重要的性能统计数据。每个统计数据都能实时更新,使得用户可以在运行时调试应用程序。它会将某个调查方面的信息分组统计到相同位置。
举个例子,如果我正在调查内存使用情况,它就应该显示到底堆、栈、库、共享内存以及mmap使用了多少内存。假如某个特定内存区域大大超过了我的预期,我可以继续深入调查,而这个性能工具可以告诉我究竟是哪些函数分配了这些内存。如果我正在调查CPU的使用情况,我会从总体统计数据开始,诸如系统时间和用户时间各是多少,某个特定进程有多少个系统调用,之后我将能够更加深入到系统时间或者是用户时间,看看到底是哪些函数消耗了这些时间以及它们被调用的频率。一个高明的shell脚本,利用合适的已存在的工具来收集并整合信息,多花些时间也能实现其中的部分功能,但要完全实现这一愿望,就有必要让一些工具的行为发生根本性的变化。

13.2.2漏洞2:没有可靠并完整的调用树

接下来的性能工具漏洞是目前还没有办法提供应用程序执行的完整的调用树。Linux有几个不完整的实现。oprofile提供了调用树的生成,但它是基于采样的,因此无法捕捉生成的每一个调用。gprof支持调用树,但它无法分析整个应用程序,除非是特定进程调用的每一个库编译时选择支持分析。最有前途的工具valgrind有一个界面称为calltree,详述参见5.2.5节,它的目标是提供一个完全准确的调用树。但是,它还在发展中,且无法适用于所有的二进制文件。
调用树工具是很有用的,即便是当它运行时会明显降低应用程序的性能。常见的使用方法是:先运行oprofile找出应用程序中的哪些函数是“热点”,然后运行调用树程序明确为什么应用程序要调用它们。oprofile那一步将提供全速运行时应用程序瓶颈的准确视图,而调用树,即使它运行缓慢,也会显示应用程序是如何调用那些函数以及调用的原因。唯一的问题是,如果程序的行为是时间敏感的,运行缓慢将会导致其行为发生变化(比如那些依赖于网络或磁盘I/O的)。不过,现有的许多问题不是时间敏感的,用准确的调用树机制修复它们还有很长的路要走。

13.2.3漏洞3:IO的归因

最后,当前Linux中最大的漏洞是I/O归因。现在,Linux没有提供好的方法来追踪哪些应用程序使用了最多的磁盘或者甚至是网络I/O。
一个理想的工具应实时显示特定进程使用的磁盘或网络I/O的输入输出字节数。该工具将显示统计数据,如原始带宽,以及子系统能够占用的原始I/O百分比。此外,用户还要能分解统计数据,以便他们可以看到每一个单独网络和磁盘设备都相同的统计信息。

13.3 Linux的性能调优

即使存在上述漏洞,Linux仍然是一个发现并修复性能问题的理想环境。它是由开发人员编写给开发人员的,其结果就是,它对性能调查者非常友好。Linux有几个特点使它成为追踪性能问题的优秀平台。

13.3.1 可用的源代码

首先,开发人员可以访问到整个系统的大多数(如果不是全部)的源代码。如果问题看上去不在你的代码中,那么在追踪问题时这一点就相当有价值。对商用UNIX或其他无法获得源代码的操作系统,你可能需要等待供应商对问题进行调查,如果的确是他的问题,你也无法保证他会修复问题。但是,对Linux而言,你可以自己调查问题,弄清楚为什么性能问题会发生。如果问题不在你的应用程序中,你可以修复它并提交补丁,或是直接运行一个已修复的版本。如果在阅读Linux源代码后,你意识到是你的应用程序有问题,那么你也可以修复问题。不管是哪种情况,你都可以立即进行修复,不会因等待别人而卡壳。

13.3.2 容易联系开发者

Linux的第二个优点是:找到并联系特定应用程序或库的开发人员相对容易。大多数其他专有操作系统很难说清楚哪个工程师负责哪个代码片段,相比之下,Linux要更加开放。通常,特定软件片段开发人员的名字和联系方式都放在软件包中。访问开发人员使你可以咨询一些问题,包括:特定代码段的行为,运行缓慢的代码是干什么用的,以及给定的优化执行起来是否安全。开发人员一般会很乐意就此提供帮助。

13.3.3 Linux还年轻

Linux是性能优化的优秀平台的最后一个理由是它还未成熟,功能仍在开发中,Linux 还有很多机会发现并修复简单的性能缺陷。大多数开发人员关注于添加功能,因此性能问题会被搁置一边不去解决。一个雄心勃勃的性能调查人员可以在不断开发的Linux中发现并修复很多小的性能问题。这些小修复超越了单个个体,惠及整个Linux团体。

13.4本章小结

本章我们研究了Linux性能工具几个集中存在缺点的方面,并提出了一些理想的解决方案。我们还讨论了为什么Linux是一个尝试进行性能调查和优化的好平台。
改变Linux获得更好的性能,这取决于你——读者。提升Linux性能,改进Linux性能工具的机会比比皆是。如果你发现了困扰你的性能问题,修复它,或者向开发人员报告,和他们一起修复它。无论哪种方式,都不会再有人被这个问题卡住,整个Linux团体都会受益。

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

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

相关文章

二维码智慧门牌管理系统升级解决方案:地图展示

文章目录 前言一、地图展示功能二、其他升级和改进 前言 随着城市的发展和信息化建设的推进,二维码智慧门牌管理系统在社区管理、物流配送、巡检巡查等多个领域发挥着越来越重要的作用。为了更好地满足用户需求,提升管理效率和服务质量,我们…

ATT 格式汇编语言语法

GNU 汇编器是 GNU 二进制实用程序 (binutils) 的一部分,也是 GNU 编译器集合的后端。尽管 as 不是编写相当大的汇编程序的首选汇编程序,但它是当代类 Unix 系统的重要组成部分,特别是对于内核级黑客攻击。 经常因其神秘的 AT&T 风格语法而…

Deep Learning for Geophysics综述阅读(未完)

文章题目《Deep Learning for Geophysics: Current and Future Trends》 文章解读:地球物理学(人工智能轨道)——(1)文献翻译《面向地球物理学的深度学习:当前与未来趋势》 - 知乎 (zhihu.com) 这里主要列…

数组模拟堆

文章目录 QuestionIdeasCode Question 维护一个集合,初始时集合为空,支持如下几种操作: I x,插入一个数 x ; PM,输出当前集合中的最小值; DM,删除当前集合中的最小值(数…

Hive安装配置 - 内嵌模式

文章目录 一、Hive运行模式二、安装配置内嵌模式Hive(一)下载hive安装包(二)上传hive安装包(三)解压缩hive安装包(四)配置hive环境变量(五)关联Hadoop&#x…

基于Java的人事管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

使用 类加载器 或者 类对象 读取文件

相对路径:项目 的 根目录 开始查找。( 但是在我们真正开发的时候,我们读到的更多的文件并不是直接放在我们项目里面这个文件夹里面,而是放在我们模块里面 )同理可得,我们直接创建 文件 b.txt 会在项目的根目…

ESP32C3 LuatOS TM1650①驱动测试

合宙TM1650驱动资料 TM1650.lua源码 引脚连接 TM1650ESP32C3SCLGPIO5SDAGPIO4 下载TM1650.lua源码,并以文件形式保存在项目文件夹中 驱动测试源码 --注意:因使用了sys.wait()所有api需要在协程中使用 -- 用法实例 PROJECT "ESP32C3_TM1650" VERSION …

动手实现H5仿原生app前进后退切换效果

动手实现H5仿原生app前进后退切换效果 前言 最近在优化H5页面&#xff0c;我注意到当开发完成的移动端H5页面嵌入到微信小程序或者原生app中时&#xff0c;当触发页面路由切换会与原生app看上去有点格格不入&#xff0c;因为H5页面<router-view>切换路由时是直接替换了…

【Qt控件之QToolBox】介绍及使用

概述 QToolBox类提供了一个列式的带有选项卡的小部件条目。工具箱是一个小部件&#xff0c;以一个列式的选项卡显示在上方&#xff0c;并在当前选项卡下方显示当前的小部件条目。每个选项卡在选项卡列中有一个索引位置。选项卡的小部件条目是一个QWidget。 每个小部件条目都有…

[ Windows-Nginx ]Windows服务器,Tomcat容器部署项目,整合Nginx

一、官网下载Nginx http://nginx.org/en/download.html 稳定版&#xff1a;windows的stable版本 注意&#xff1a;Nginx安装包不要放在中文目录下 二、conf目录下&#xff0c;修改nginx.conf文件 修改Nginx服务端口&#xff1a; 默认端口为80&#xff0c;即外界访问的入口…

阿里巴巴店铺所有商品数据接口及店铺商品数据分析

获取阿里巴巴店铺所有商品数据的接口是阿里巴巴开放平台提供的接口&#xff0c;通过该接口可以获取店铺所有商品数据。 通过阿里巴巴开放平台接口获取店铺所有商品数据的方法如下&#xff1a; 在开放平台注册成为开发者并创建一个应用&#xff0c;获取到所需的 App Key 和 Ap…

学习c#桌面应用编程 --- 我的第一个游戏

场景 我需要做一个c#桌面窗口软件&#xff0c;但是我曾经都是专职于java开发&#xff0c;但是java对windows并不是特别友好(awt除外)&#xff0c;于是必须需要掌握c#桌面编程&#xff0c;所以我需要手动做一个小游戏&#xff0c;来学习c#的一些基本桌面应用的知识。 开始 这…

shell的if-else判断结构

if-else笔记 简单if结构if/else结构 if判断是shell编程中使用频率最高的语法结构 简单if结构 最简单的if执行结构如下所示:if expression #expression 表示测试条件 thencommand #满足expression后要执行的命令command... f1使用这种简单 if 结构时&#xff0c;要特别…

基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程的集成方法与步骤(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 前面讲了集成的后端部分内容&#xff0c;下面简单介绍一下前端的内容 1、前端生成的页面需要进行修改&…

C1N短网址 - 是如何做到行业领先的

今天从技术角度来聊下短网址的一些事情&#xff0c;市面上的短网址发展基本上经历了几个阶段。 短网址发展的几个阶段&#xff1a; 第一阶段&#xff1a;网址缩短&#xff0c;很纯粹的功能&#xff0c;各个大小公司都在做&#xff0c;门槛很低。典型代表&#xff1a;百度短网…

项目添加以vue为后缀名的vue文件,怎么解析打包

我们都知道&#xff0c;将css文件打包起来&#xff0c;需要加载css-loader和style-loader&#xff0c;那么vue文件打包也需要 下载插件&#xff1a; npm install vue-loader vue-template-compiler --save -dev 下载过程&#xff1a; 下载成功样子&#xff1a; 下载完之后&am…

Android屏幕刷新机制

基础知识 CPU运行在Android设备上的中央处理器&#xff08;Central Processing Unit&#xff09;是Android设备的核心组件之一&#xff0c;负责执行计算和控制设备的各种操作。 Android设备上的CPU通常采用ARM架构&#xff0c;如ARM Cortex-A系列处理器。这些处理器具有高性能…

nginx+nodejs 一台服务器站架多个网站

一、一台服务器架设多个 nodejs 网站的拓扑结构 二、搭建 Nodejs 生产环境 1、下载 下载 nodejs 二进制代码包或者&#xff0c;然后减压到 /usr/local/nodejs 2、配置环境变量 (1).vi /etc/profile (2).最后面添加&#xff1a; export NODE_HOME/usr/local/nodejs/bin…

hbase操作学习

1.namespace list_namespace 展示数据库 create_namespace 可以带属性名 属性值 create_namespace mydb,{author>hjp,ctime>2023-10-18}describe_namespace ‘库名’ 查看库的详细信息 alter_namespace ‘库名’ 修改表的详细信息 删除就是把method设置为unset dr…