Linux性能优化--性能工具:下一步是什么
13.0 概述
本章是对一些事情的思索,包括:Linux性能工具的当前状态,哪些仍需要改进以及为什么Linux是当前一个相当不错的进行性能调查的平台。
阅读本章后,你将能够:
- 了解Linux性能工具箱的漏洞,以及一些理想的解决方案。
- 了解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团体都会受益。
相关文章:

Linux性能优化--性能工具:下一步是什么
13.0 概述 本章是对一些事情的思索,包括:Linux性能工具的当前状态,哪些仍需要改进以及为什么Linux是当前一个相当不错的进行性能调查的平台。 阅读本章后,你将能够: 了解Linux性能工具箱的漏洞,以及一些理…...

网工内推 | IT主管、高级网工,上市公司,必须持有HCIE认证
01 深圳市飞荣达科技股份有限公司 招聘岗位:高级网络工程师 职责描述: 1. 参与、负责集团公司IT基础技术架构的规划设计、实施及维护、性能优化,包括数据中心机房、网络架构、虚拟化平台、信息安全设备及灾备系统等; 2. 负责集团…...

bulldog 靶机
bulldog 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 正在开发的如果你正在读这篇文章,你很可能是Bulldog Industries的承包商。恭喜你!我是你们的新老板,组长艾伦布鲁克。CEO解雇了整个开发团队和员工。因此,我们需要迅速招到一…...

如何借助边缘智能网关打造智慧城市便民驿站
智慧城市驿站是一类提供多样化便利服务的新型智能公共设施,通过融合物联网技术、边缘智能技术、新能源技术等,为城市居民整合提供休闲、购物、卫生、广告、安全等公共服务,进一步提升日常生活体验。本篇就为大家介绍如何基于边缘智能网关&…...

谈谈电商App的压测
背景 最近恰逢双十一,大大小小的电商app在双十一之前都会做一次压测,曾经在小公司工作的时候很想知道大公司是如何压测的,有什么高深的压测工具没,本文就来揭露一下 压测真相 在确认使用什么压测工具进行压测之前,我…...

VsCode修改侧边栏字体大小——用缩放的方法
缩放界面字体百分比(包括编辑器界面) 如果只修改文本编辑区的字体大小,可以在File -> Preferences -> Settings 中修改font的大小。但是侧边栏的字体不会改变,所以可以使用缩放的方法先修改整个界面的字体大小,…...

基于Java的农资采购销售管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

【AIGC核心技术剖析】扩大富有表现力的人体姿势和形状估计SMPLer-X模型
富有表现力的人体姿势和形状估计 (EHPS) 将身体、手和面部运动捕捉与众多应用结合起来。尽管取得了令人鼓舞的进展,但当前最先进的方法仍然在很大程度上依赖于有限的训练数据集。在这项工作中,我们研究了将 EHPS 扩展到第一个通用基础模型(称为 SMPLer-X),以 ViT-Huge 作为…...

【C++面向对象】1. 类、对象
文章目录 【 1. 类 & 对象的定义 】1.1 类的定义1.2 对象的定义 【 2. 类的成员 】2.1 数据成员2.2 成员函数类的内部定义成员函数类的外部定义成员函数成员函数的访问实例 【 3. 类的访问修饰符 】3.1 public 公有成员3.2 private 私有成员3.3 protected 保护成员3.4 继承…...

PAM从入门到精通(十三)
接前一篇文章:PAM从入门到精通(十二) 本文参考: 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构: 更加形象的形式: 五、主要函数详解 11. pam_open_session 概述&…...

Stable Diffusion WebUI几种解决手崩溃的方法
1. 添加与手相关负面提示词 如何提价提示词呢? 首先有一个embeddings模型文件bad-hands-5,我们可以去各个大模型网站去搜,我是在C站上面下载的。 附上C站地址:https://civitai.com/ 下载好之后,你需要将文件放入stable-diffusion-webui\embeddings目录中。位置如下所示…...

kr 第三阶段(一)16 位汇编
为什么要学习 16 位汇编? 16 位汇编包含了大部分 32 位汇编的知识点。有助于在学习内核的两种模式。 实模式:访问真实的物理内存保护模式:访问虚拟内存 有助于提升调试能力,调试命令与 OllyDbg 和 WinDebug 通用。可以学习实现反…...

power point导出pdf保留字体
在 slides 中用到非自带的字体,如 [1],想导出成 pdf 文件(因为导出成图,如 png,放大会蒙),并在别人电脑里也保留字体。除了让别人也装上相应字体,可以: 参考 [2]&#x…...

云务器迁移(腾讯云>华为云)
自己平时除了写些bug外还喜欢玩玩服务器,这不前几年买了一个域名,当时服务器买的是阿里云的,想着域名备案挺麻烦的就一直用着,只是在服务器到期后会重新购买其他运营商的(关键是续不起🤫) 这不最…...

[USACO11MAR] Brownie Slicing G题解(二分+二维前缀和+矩阵分割)
[USACO11MAR] Brownie Slicing G 题目地址 P3017 [USACO11MAR] Brownie Slicing G 思路 二分最大化最小值 切割思路: 一行一行进行切割,如果这一行可以切割出b块大于等于mid的块,就开始切割下一行 如果无法切割出b块,就把正在…...

【每日一题】—— B. Arrays Sum (Grakn Forces 2020)
🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…...

XTU-OJ 1328-数码和
题目描述 一个10进制数n在2∼16进制下可以得到的不同的数码和,求在这些数码和中出现次数最多的数码和。 比如20, 进制2345678910111213141516数码10100202110403226242220191817161514数码和2424586421098765 其中数码和2和4分别出现了3次,为…...

混入组件 (mixin)
1 什么是混入以及作用 *混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。作用:主要作用是继承和封装…...

ubuntu18.04 RTX3060 rangnet++训练
代码链接: https://github.com/PRBonn/lidar-bonnetal 安装anaconda环境为 CUDA 11.0(11.1也可以) anaconda环境如下 numpy1.17.2 torchvision0.2.2 matplotlib2.2.3 tensorflow1.13.1 scipy0.19.1 pytorch1.7.1 vispy0.5.3 opencv_python…...

HZOJ-72:猜拳
题目描述 在一次聚会中,每人拿着一张印有石头、剪刀、布的卡片,每个人具体拿得是哪种卡片不得而知。 现在告诉你某些人之间的胜负关系,并会询问某两个人之间的对战结果,人按照从 11 到 n� 编号。 对于每个…...

【Django 03】QuerySet 和 Instance应用
1. DRF QuerySet 和 Instance功能概述 1.1 QuerySet 从数据库中查询结果存放的集合称为 QuerySet。 Django ORM用到三个类:Manager、QuerySet、Model。每个Model都有一个默认的 manager实例,名为objects。Django的ORM通过Mode的objects属性提供各种数据…...

安装 mysql
gpt: 要在 Debian 11 上安装 MySQL 数据库服务器,您可以使用以下步骤: 1. **更新软件包列表**:在安装任何软件之前,始终建议首先更新软件包列表,以确保获取最新的软件包信息。在终端中运行以下命令: bash…...

文件管理系统的基本认识
1.文件的属性 文件的定义:一组有意义的信息的集合。 1.文件名: 由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。 2.标识符: 一个系统内的各文件标识符唯一,对用户来说毫无可读性, 因此…...

Excel·VBA制作工资条
看到一篇博客《excel表头_Excel工资表怎么做?3分钟学会利用函数生成工资表》,使用排序功能、函数制作工资条。但如果需要经常制作工资条,显然使用VBA更加方便 VBA制作工资条 Sub 制作工资条()Dim title_row&, blank_row&, ws_new$,…...

【SA8295P 源码分析 (二)】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析
【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析 一、HQX Display 介绍1.1 OpenWF Display Driver二、HQX Display 配置文件参数解析2.1 qcdisplaycfg.xml 配置文件2.1 配置两个 DPUs in QNX2.1.1 配置 graphics_ADP_STAR.conf : …...

git操作说明
SourceURL:file:///home/kingqi/桌面/git操作说明.doc 本地建立仓库 mkdir namebao cd namebao pwd git init 初始化 cd .git/ gedit config 本地存储 进入目录上传全部文件 git add . 提交 git commit -m “说明” 远程提交 复制gitee或者github仓库链接 可以直…...

数据结构——栈与队列
数据结构——栈与队列 文章目录 数据结构——栈与队列一、栈的定义二、队列的定义 一、栈的定义 栈(Stack)是一种具有特殊限制的线性数据结构,它只允许在表的一端进行插入和删除操作。这一端被称为栈顶(Top)ÿ…...

Redis入门到实战(四、原理篇)RESP协议
目录 2、Redis内存回收-过期key处理3、Redis内存回收-内存淘汰策略 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub): 客户端(client)向服务端(server)发送一条命令…...

c++屏蔽qq或者wechat的好友对局域网环境下的指定关键字
要使用C来屏蔽QQ或WeChat的好友对家庭网络或局域网环境下的指定关键字,你需要编写一个网络包过滤程序,该程序需要有能力拦截并分析网络流量,然后根据指定的规则(如关键字)来阻止或允许数据包的传输。然而,需…...

rviz中显示的点云与网格垂直,将保存的pcd文件转为点云在rviz中显示,并使用octomap_server将点云地图转化为八叉树地图和占据栅格地图
文章目录 问题:点云与网格垂直背景解决方法:对点云坐标做变换,绕x轴旋转90度,将z轴指向上方将pcd转成点云,在RVIZ中显示点云图创建launch rviz显示 问题:点云与网格垂直 用lego-loam建图时用rosbag录制相关…...