linux性能优化--性能追踪建议

1.1.常用建议

1.1.1.记大量的笔记(记录所有的事情)

在性能调查之初,我通常会为其创建一个目录,在GNU Emacs中打开一个新的“Notes”文件,开始记录系统的信息。
之后,将性能结果保存到这个目录,并将有意思的和相关的信息保存到Notes文件。
建议将下面的内容添加到你的性能调查文件和目录中:
1.记录软硬件情况
记录下的信息包括硬件配置(主存容量、CPU类型、网络和磁盘子系统)和软件环境(OS和软件的版本、相关配置文件)。
示例:每次测试时,保存cat /proc/pci、dmesg和uname-a的输出。
2.保存并组织性能结果
3.记下测试命令
Linux命令script(详见第8章)或者从终端“剪切粘贴”都是完成这项工作的好方法。
4.记录研究信息和URL在调查问题时,请牢记以下几点:
1.结果的含义可能是不明确的
2.所有的信息都是有用的
通过记录和整理调查过程中你所见的一切,你就有证据支持特定理论,同时也具备大量的测试结果来证明或驳斥其他理论。
3.定期回顾你的笔记可以得到新的想法

1.1.2自动执行重复任务

自动执行性能工具调用和应用程序测试是一个好办法:
1.性能工具调用——有些Linux性能工具的命令行相当复杂,给自己省点力,把它们保存到一个shell脚本中,
或是将所有命令都放到可以进行剪切粘贴的参考文件中。
2.应用程序测试——大部分应用程序有着复杂的配置,要么通过命令行,要么通过配置文件。
将调用保存为脚本,自动化。

1.1.3尽可能选择低开销工具

例如,对于正在使用的应用程序,工具ps能给出其主存数量和类型的相当不错但粗糙的概况。
那些准确性更高,但是影响较大的工具,如memprof或valgrind,虽然也能提供这些信息,
但是它们消耗的主存和CPU资源比只使用原始应用程序要大,因此会改变系统行为。

1.1.4使用多个工具来搞清楚问题

实际上,你使用的每一种工具都会为问题的原因提供线索,因此,你必须同时使用多个工具来真正搞清楚发生了什么。

1.1.5 相信你的工具

性能追踪的过程中,最令人兴奋又令人沮丧的时刻之一,就是工具显示了一个“不可能”的结果。
某些“不会”发生的事情却明明白白地发生了。第一反应会认为工具坏了。不要被直觉愚弄了,工具是公正的。

1.1.6利用其他人的经验(慎重)

1.2性能调查概要

1.2.1找到指标、基线和目标

性能调查的第一步就是确定当前的性能,并明确其应提升的程度。
如果你的系统明显性能不佳,你就可以确定值得花时间进行研究。
但是,如果系统性能接近其峰值,那么就不值得研究。
明确性能峰值有助于你设置合理的性能期望值,并能给你一个性能目标,这样你就知道何时应该停止优化。
你可能总是没有目标地时不时对系统做一点调整,这会浪费大量的时间,只为得到一些额外的性能,即使你可能并不真的需要它们。
1.2.1.1 确定指标
要想知道什么时候结束优化,你必须为系统自行确立或是使用已发布的指标。
例如,如果你要优化一个Web服务器,你就可以选择“每秒服务的Web请求数”。
如果你没有一个客观的途径来度量性能,那么在调整系统的时候,你几乎无法确定是否取得了进展。
1.2.1.2确定基线
在你明确了如何度量特定系统或应用程序的性能之后,确定当前的性能等级就很重要了。
在调整和优化之前,运行应用程序并记录其性能,这就是基线值,它是性能调查的起点。
1.2.1.3确定目标
你确定了性能指标和基线后,现在需要确定一个目标,这个目标引导你完成性能追踪。
你可以无限期地调整系统,花费越来越多的时间来获得更加好一点的性能。
如果你制定了目标,那么你就会知道什么时候该结束整个过程。要选择合理的目标,下面是一些好的起点:
1.寻找其他有相同配置的人,询问他们的性能指标
2.查找工业标准测试程序的结果
不过,很多基准测试网站给出了特定结果使用的配置,这些配置信息可以为你调整系统提供线索。
3.在不同的OS或应用程序上使用你的硬件如果用现有的性能信息来指导你的目标,那么你有更好的机会来选择一个积极的,但也并非不可能达到的目标。

1.2.2 追踪近似问题

这里非常重要的一点是要有良好的书面记录来解释你认为问题是怎样的,以及什么样的测试使你得出了这个结论。

1.2.3查看问题是否早已解决

因为你的目的就是要改进系统性能,所以解决性能问题最好的办法就是依靠其他人已有的成果。
尽管你很可能对性能问题的具体建议持保留态度,
但是这些建议具有启发性,可以使你了解到其他人可能已经研究过相似的问题,他们是如何试着解决问题的,以及他们是否成功了。
下述这些地方也能寻求性能建议:
1.在Web上查找相似的错误信息/问题——这通常是我调查的第一步。
2.在应用程序邮件列表上求助
搜索一下邮件列表的存档,因为有人可能会问过相同的问题。而随后对原始消息的回复也许就描述了一个解决方案。
如果没有这样的回复,就向最初提出这个问题的人发邮件,询问他是否找到了解决方法。
如果这样也不行,或是没有其他人提出过相似的问题,那么在列表上发邮件说明你的问题,幸运的话,也许已经有人把这个问题解决了。
3.向开发人员发邮件——很多Linux软件在文档的某个位置包含了开发者的e-mail地址,
如果在互联网和邮件列表中搜索失败,你可以尝试直接给开发者发邮件。
虽然开发者关于性能问题原因的想法不见得正确,但是他们可能会给你指出一个富有成果的方向。
4.与内部开发人员交谈--如果产品是内部开发的。依靠其他人的工作,你也许在性能调查开始之前就能解决问题。至少,你有可能找到一些有希望的方法来调查,所以,最好总是看看别人有什么发现。

1.2.4项目开始(启动调查)

1.分离问题
如果可能的话,删去任何运行于被调查系统的多余的程序或应用。
运行许多不同应用程序的系统,其负载较重,会影响性能工具收集信息的准确性,并最终将你引导到错误的方向。
2.利用系统差异发现原因
如果你能发现一个相似的系统具有更好的性能,那么这对问题调试将是一个有力的帮助。
使用性能工具的问题之一就是,你不一定有好的方法知道性能工具的结果是否指明了问题。
如果你有一个好的系统和一个差的系统,你就可以在这两个系统上运行同样的性能工具,并比较它们的结果。
如果结果不同,就可以通过找出系统差异来确定问题的原因。
3.一次只改变一件事
要真正确定问题出在哪儿,一次只能有一个变化。
这可能会很花时间,并让你运行多个不同的测试,但它的确是发现你是否解决了问题的唯一途径。
4.始终在优化后重新测量
如果你稍稍调整了系统,那么在调整后对所有的事情重新进行测量是很重要的。
当你开始修改系统配置时,所有之前生成的性能信息可能不再有效。
通常,在你解决一个性能问题时,别的问题会随之而来。新问题可能与老问题有着极大的不同,
因此,你真的需要重新运行性能工具来确保正在调查的问题没有出错。
遵循这些建议能帮助你避免误导,并有助于确定性能问题的原因。

1.2.5 记录,记录 记录

如前所述,记录你所做的事情以便之后回顾和审查,这一点确实很重要。
在解决问题后,花些时间重写你的发现以及为什么你认为这么做是对的。
包括测量得到的性能结果和做过的实验。虽然看上去工作量很大,但却是非常值得的。

1.3本章小结

首先,确定是否有其他人遇见过相似的问题,
如果有,尝试他们的解决方案。要对他们告诉你的保持怀疑,要寻找具有类似问题经验的人。
为你的性能追踪设立合理的指标和目标,指标使你知道什么时候应该结束追踪。
自动执行性能测试。生成测试结果和配置信息时,要确保将它们记录下来,以便之后可以审查这些结果。
保持结果的条理性,记录下任何与你的问题相关的研究和其他信息。
最后,定期回顾你的笔记,找出之前可能被漏掉的信息。
如果遵循了这些原则,你的问题调查将会有一个明确的目标和一个清晰的过程。

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

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

相关文章

数据结构:堆的简单介绍

目录 堆的介绍:(PriorityQueue) 大根堆:根节点比左右孩子节点大 小根堆:根节点比左右孩子节点小 堆的存储结构: 为什么二叉树在逻辑上用满二叉树结构,而不是普通二叉树呢? 因为如果是普通二叉树会造成资源的浪费​编辑 堆的介绍:(PriorityQueue) 堆又称优先级队列,何为优先…

RocketMQ —消费者负载均衡

消费者从 Apache RocketMQ 获取消息消费时,通过消费者负载均衡策略,可将主题内的消息分配给指定消费者分组中的多个消费者共同分担,提高消费并发能力和消费者的水平扩展能力。本文介绍 Apache RocketMQ 消费者的负载均衡策略。 背景信息​ …

maven中relativepath标签的含义

一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性&#xff1a;parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…

【切片】基础不扎实引发的问题

本次文章主要是来聊聊关于切片传值需要注意的问题&#xff0c;如果不小心&#xff0c;则很容易引发线上问题&#xff0c;如果不够理解&#xff0c;可能会出现奇奇怪怪的现象 问题情况&#xff1a; 小 A 负责一个模块功能的实现&#xff0c;在调试代码的时候可能不仔细&#x…

electron之快速上手

前一篇文章已经介绍了如何创建一个electron项目&#xff0c;没有看过的小伙伴可以去实操一下。 接下来给大家介绍一下electron项目的架构是什么样的。 electron之快速上手 electron项目一般有两个进程&#xff1a;主进程和渲染进程。 主进程&#xff1a;整个项目的唯一入口&…

【Java】复制数组的四种方式

1. System.arraycopy() 用来将一个数组的&#xff08;一部分&#xff09;内容复制到另一个数组里面去。 定义&#xff1a; void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);例&#xff1a; int[] arr1 { 1, 2, 3, 4, 5 }; int[] arr2 new…

SpringBoot全局异常处理源码

SpringBoot全局异常处理源码 一、SpringMVC执行流程二、SpringBoot源码跟踪三、自定义优雅的全局异常处理脚手架starter自定义异常国际化引入封装基础异常封装基础异常扫描器&#xff0c;并注册到ExceptionHandler中项目分享以及改进点 一、SpringMVC执行流程 今天这里叙述的全…

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

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Java微信分享接口开发

概述 微信JS-SDK实现自定义分享功能&#xff0c;分享给朋友&#xff0c;分享到朋友圈 详细 概述 概述 微信公众平台开始支持前端网页&#xff0c;大家可能看到很多网页上都有分享到朋友圈&#xff0c;关注微信等按钮&#xff0c;点击它们都会弹出一个窗口让你分享和关注&…

前端uniapp防止页面整体滑动页面顶部以上,设置固定想要固定区域宽高

解决&#xff1a;设置固定想要固定区域宽高 目录 未改前图未改样式改后图改后样式 未改前图 未改样式 .main {display: flex;flex-direction: row;// justify-content: space-between;width: 100vw;// 防止全部移动到上面位置&#xff01;&#xff01;&#xff01;&#xff01…

【C++的OpenCV】第十三课-OpenCV基础强化(一):绝对有用!Mat相关的一系列知识(基础->进阶)

&#x1f389;&#x1f389;&#x1f389; 欢迎各位来到小白 p i a o 的学习空间&#xff01; \color{red}{欢迎各位来到小白piao的学习空间&#xff01;} 欢迎各位来到小白piao的学习空间&#xff01;&#x1f389;&#x1f389;&#x1f389; &#x1f496;&#x1f496;&…

在nodejs中如何防止ssrf攻击

在nodejs中如何防止ssrf攻击 什么是ssrf攻击 ssrf&#xff08;server-side request forgery&#xff09;是服务器端请求伪造&#xff0c;指攻击者能够从易受攻击的Web应用程序发送精心设计的请求的对其他网站进行攻击。(利用一个可发起网络请求的服务当作跳板来攻击其他服务)…

C++核心编程--继承篇

4.6、继承 继承是面向对象三大特征之一 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; ​ 我们发现&#xff0c;定义这些类的定义时&#xff0c;都拥有上一级的一些共性&#xff0c;还有一些自己的特性。那么我们遇到重复的东西时&#xff0c;就可以考虑使…

大数据Flink(八十九):Temporal Join(快照 Join)

文章目录 Temporal Join(快照 Join) Temporal Join(快照 Join) Temporal Join 定义(支持 Batch\Streaming):Temporal Join 在离线的概念中其实是没有类似的 Join 概念的,但是离线中常常会维护一种表叫做 拉链快照表,使用一个明细表去 join 这个 拉链快照表 的 join …

GD32F10x的输出模式

1. 单片机型号的识别。 2. GPIO的输出模式。 1. 开漏模式 2.推挽模式 3.复用开漏模式 4.复用推挽模式。 开漏模式&#xff1a;&#xff08;写入位设置&#xff0c;输出数据寄存器来控制MOS&#xff09; 只有N-MOS管导通。PMOS不导通。 当N-MOS的栅极为0&#xff0c;N-MOS管…

SQL血缘解析原理

根据sql解析获取到表到表, 字段到字段间的关系,即血缘关系。实际上这是从sql文本获取到数据流的过程。 大致步骤如下&#xff1a; 1.sql文本进行词法分析 2.sql语法分析获取到AST抽象语法树 3.访问AST抽象语法树根据语法结构推测出数据的流向,例如create as select from 这种结…

排序:败者树和置换选择排序(解决外部排序中的优化问题)

1.算法目的&#xff08;败者树&#xff09; 解决多路平衡归并带来的问题。 在外部排序中&#xff0c;使用k路平衡归并策略, 选出一个最小元素需要对比关键字(k-1)次&#xff0c; 导致内部归并所需时间增加。&#xff08;可用“败者树”进行优化&#xff09; 2.败者树的定义 …

高德地图根据两点的经纬度计算两点之间的距离(修正版)

SQL语句可以用来计算两个经纬度之间的距离。下面是一个示例的SQL语句&#xff1a; SELECT id, ( 6371 * ACOS( COS( RADIANS( lat1 ) ) * COS( RADIANS( lat2 ) ) * COS( RADIANS( lng2 ) - RADIANS( lng1 ) ) SIN( RADIANS( lat1 ) ) * SIN( RADIANS( lat2 ) ) ) ) AS dista…

ROS系统读取USB相机图像数据

ROS系统读取USB相机图像数据 前言usb_cam 功能包下载与编译摄像头选择连接摄像头可配置参数 前言 usb_cam功能包简介 为了丰富机器人与外界的交互方式&#xff0c;已经增加了与机器人的语音交互方式&#xff0c;不仅使机器人能够说话发声&#xff0c;还能听懂我们说的话&#…

泽众APM性能监控软件

泽众Application Performance Management&#xff08;简称APM&#xff09;是一款专业的性能监控工具&#xff0c;可以对全链路如Web服务器、应用服务器、数据库服务器等进行实时监控&#xff0c;并以图表化的形式直观地呈现监控数据&#xff0c;为系统性能优化和定位问题提供准…