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� 编号。 对于每个…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
