Linux性能优化实践——如何学习Linux性能优化

news2024/11/16 5:52:42

性能指标

学习性能优化的第一步便是了解“性能指标”这个概念。
“高并发”和“响应快”对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的角度来考察性能的,直接影响了产品终端的用户体验。跟他们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。
应用负载视角(吞吐、延时...)
性能分析,其实就是找出应用或系统的瓶颈,并设法去避免或者缓解它们,从而更高效地利用系统资源处理更多请求。这包含下面一系列步骤:

  1. 选择指标评估应用程序和系统的性能;
  2. 为应用程序和系统设置性能目标;
  3. 进行性能基准测试;
  4. 性能分析定位瓶颈;
  5. 优化系统和应用程序;
  6. 性能监控和告警;

学习重点

建立整体系统性能的全局观。
布伦丹·格雷格(Brendan Gregg)的Linux性能工具图谱如下,
在这里插入图片描述
需要注意工具的选用,先理解原理,再结合具体场景,融会贯通系统的不同组件,灵活运用,

学习Linux性能优化分为下面几个部分:

  1. CPU
    1.1 进程和CPU原理
    1.2 性能指标(平均负载、CPU使用率、上下文切换、CPU缓存命中率)
    1.3 性能剖析(top/ps、vmstat、mpstat、sar、pidstat、strace、perf、execsnoop、proc文件系统)
    1.4 调优方法(CPU绑定、进程CPU资源限制、进程优先级调整、中断负载均衡、CPU缓存、NUMA优化)

  2. 内存
    2.1 内存原理
    2.2 性能指标(系统内存使用量、进程内存使用量、缓存与缓冲区命中率、SWAP使用量)
    2.3 性能剖析(free、top、sar、vmstat、cachestat、cachetop、memleak、proc文件系统)
    2.4 调优方法(利用缓存与缓冲区、减少SWAP使用、减少动态内存分配、优化NUMA、限制进程内存资源、使用HugePage)

  3. 网络
    3.1 网络原理
    3.2 性能指标(吞吐量、延迟、丢包、TCP重传)
    3.3 性能剖析(ethtool、sar、ping、netstat/ss、ifstat、ifconfig、tcpdump、wireshark、iptables、traceroute、ipcontrack、perf)
    3.4 调优方法(网卡调优、协议调优、资源控制、内核调优)

  4. 磁盘IO
    4.1 磁盘原理
    4.2 性能指标(使用率、IOPS、吞吐量、IOWAIT)
    4.3 性能剖析(dstat、sar、iostat、pidstat、iotop、iolatency、blktrace、fio、perf)
    4.4 调优方法(系统条用、I/O资源控制、充分利用缓存、RAID、I/O隔离)

  5. 文件系统
    5.1 文件系统原理
    5.2 性能指标(容量、IOPS、缓存命中率)
    5.3 性能剖析(df、strace、vmstat、sar、perf、proc文件系统)
    5.4 调优方法(文件系统选型、利用文件系统缓存、I/O隔离)

  6. Linux内核
    6.1 内核原理
    6.2 性能剖析(BPF、perf、proc文件系统)
    6.3 调优方法(内核选项)

  7. 应用程序
    7.1 文件系统原理
    7.2 性能指标(吞吐量、响应时间、资源使用率)
    7.3 性能剖析(USE方法、进程剖析、APM)
    7.4 调优方法(逻辑简化、编程语言、算法调优、非阻塞I/O、利用缓存与缓冲区、异步处理与并发、垃圾回收)

  8. 架构设计
    8.1 空间换时间(缓存、缓冲区、冗余数据)
    8.2 时间换空间(压缩编码、页面交换)
    8.3 并行处理(多线程、多进程、分布式)
    8.4 异步处理(异步I/O、消息队列、事件通知)

  9. 性能监控
    9.1 时间序列分析(历史趋势分析、性能模型构建、未来趋势预测)
    9.2 服务调用追踪(服务调用流程跟踪、服务调用性能分析、服务调用链拓扑展示)
    9.3 数据可视化(趋势图、散点图、热图、饼图)
    9.4 告警通知(阈值选择、报警策略、通知渠道)
    10.性能测试
    10.1 明确需求(系统资源需求、应用程序需求)
    10.2 环境假设(合理的假设、生产环境模拟、生产负载模拟)
    10.3 性能测试(基准测试、负载测试、压力测试)
    10.4 结果分析(应用程序瓶颈、数据库瓶颈、系统资源瓶颈)

关键点

边学边实践

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

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

相关文章

基于Flask的问答系统的设计与实现

这个项目刚开始是跟着哔哩哔哩上的一个教程学习的,后面完成初步实现后,我按照自己的设计加入了新的功能。 文章目录 数据表mysqlredis 项目展示注册登录首页问题详情页问题回答及回复搜索功能发布问题功能评论我的功能回复我的功能我的文章功能编辑文章…

springcloud eureka增加安全认证

网上很多资料写的不全,不细致。 springcloud架构,本地运行代码是eureka地址一般为localhost:port(自己暴露的端口),例如http://localhost:9000/ ,但是如果在服务器,且使用k8s部署,一…

科大讯飞开发者大赛,有点东西~

小伙伴们大家好,我是阿秀。 如果要说 23 年上半年最火的科技圈话题是什么? 那AIGC和大模型相关的话题稳坐头把交椅,奈何由于不少服务器在海外,很多人因为没有充分条件无法体验。 后来众多国产大模型也跟上步伐,智能问答…

Spring Boot 中的任务执行器是什么,如何使用

Spring Boot 中的任务执行器是什么,如何使用 Spring Boot 是一个非常流行的 Java 开发框架,它的核心理念是通过简单的配置和约定来提高开发效率。在很多情况下,我们需要在后台执行一些任务,比如异步处理、定时任务等等。为了简化…

数据结构错题集 第八章 排序

8.1 3 B 稳定性问题: 是按关键字排序的 数值一样的两个数是两个不同的关键字 顺序可能不同 4.记住公式即可 8.2 B D与初始序列无关 选择排序:在n个中选择最小的 放在第一个 在n-1个中 选择第二小的放在第二个 快速排序 越有序 反而越复杂化 直接插入…

Spring底层核心架构

Spring底层核心架构 相关的配置类 1. user类 package com.zhouyu.service;import org.springframework.stereotype.Component;public class User { }2. AppConfig类 package com.zhouyu;import org.springframework.context.annotation.*; import org.springframework.sched…

CASS扣除中间区域面积的方法

1、打开cass软件,绘制一个矩形和圆形,圆形全部位于矩形框内,具体如下: 2、点击“地物编辑”菜单栏下的“图案填充”,如下: 3、在命令行内输入实体填充、选择范围线方式填充,选择后可得到如下结果…

基于单片机的智能路灯控制系统人体感应灯光控制系统的设计与实现

功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前时间、年月日、时分秒;按键看看有设置自动手动模式;3路红外探头用来感应当前3个区域是否有人;按键可以设置当前时间、开启和关闭教室灯光时间;在手动模式下&#…

debian to go

可以使用虚拟机操作,在运行镜像到安装步骤时选择 u盘 不需要手动分 /boot 分区之类的,“Automaction”自动分区就行,全安装到根目录。boot load 安装到 /dev/sdb,也就是硬盘本身 推荐使用gpt分区表,建议拿不用的盘练…

Basic of Solidity (solidity基础)

目录 1.first contract 申明编译器版本 定义合约 合约构造函数 定义变量 定义函数 2.data type 值类型(Value Types) 引用类型(Reference Types) 映射类型(Mapping Types) Solidity是一种用于编写…

vue + element 笔记(vue2.0)

1.安装nodejs,cmd中运行 node -v 验证是否成功 2.安装cnpm,cmd中运行 npm install -g cnpm --registryhttps://registry.npm.taobao.org,cmd中 cnpm -v 验证是否成功 3.安装vue-cli,cmd中运行 cnpm install --global vue-cli&…

三、Java的运算符

三、运算符 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 3.1、算术运算符 - * / % (前) (后) (前)-- (后)-- % :取余运算 结果的符号与被模数的符号相同 开发中,经常使用%来判断能否被除尽的情况 3.2、赋值运算符 注意:s2…

Spring Boot 中的 Native SQL 是什么, 如何使用

在 Spring Boot 中,我们通常使用 ORM 框架(例如 Hibernate 或 MyBatis)来操作数据库。但是,有时候我们需要执行一些自定义的 SQL 查询或更新语句,这时候就需要使用 Spring Boot 中的 Native SQL。 在本文中&#xff0…

Matlab绘图系列教程-Matlab 34 种绘图函数示例(下)

Matlab绘图系列教程:揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程:揭秘高质量科学图表的绘制与优化第一部分:入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …

8、添加PolylineCollection线

本节演示添加线要素,使用第四节单击事件的例子,修改点击事件创建线要素。 1、重新修改地图默认位置 double r glm::radians(-45.0); Cesium::HeadingPitchRoll *orientation new Cesium::HeadingPitchRoll(0.0, r, 0.0); glm::dvec3 initialPosition…

map和set的封装

目录 封装逻辑 用红黑树封装set和map 红黑树的定义改变 迭代器 红黑树的迭代器 set的迭代器 map重载[]操作的实现 比较关键——得到 key的类型K 封装逻辑 用红黑树封装set和map map和set用红黑树来实现的;红黑树的前三个模板参数分别表示:得到key的…

C语言---程序环境和预处理(底层原理万字详解)

文章目录 前言🌟一、程序的翻译环境和执行环境🌟二、详解编译链接🌏2.1命令🌏2.2 板书详解🌏2.3运行环境 🌟三、预处理详解🌏3.1预定义符号🌏3.2 #define💫3.2.1 #define…

第三章 SSD存储介质:闪存

3.1 闪存物理结构 闪存芯片从小到大依此是由:cell(单元)、page(页)、block(块)、plane(平面)、die(核心)、NAND flash(闪存芯片&#…

【动手学习深度学习--逐行代码解析合集】10Dropout暂退法

【动手学习深度学习】逐行代码解析合集 10Dropout暂退法 视频链接:动手学习深度学习–Dropout暂退法 课程主页:https://courses.d2l.ai/zh-v2/ 教材:https://zh-v2.d2l.ai/ 1、暂退法原理 2、从零开始实现暂退法 import torch from torch i…

微服务网关技术选型:Zuul2、Gateway、OpenResty、Kong

1、简介 当使用单体应用程序架构时,客户端(Web 或移动端)通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一个。然后应用程序会查询各种数据库表,并将响应返回给客户端。微…