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

性能指标

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

  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.hqwc.cn/news/13146.html

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

相关文章

前后端实现mqtt物联网消息互通对话(图文详解)

需求:前端使用mqtt订阅主题和硬件设备进行通讯功能,不走后端,前端操作可以控制。从部署到对话,跟着图文一套下来你也可以学会。很简单的。后端用node,前端就用原生的js,如果要使用vue,可以看我另…

LabVIEW脉冲检测实现

文章目录 前言一、脉冲检测的原理二、代码实现1、前面板①、输入波形相关参数②、脉冲检测结果 2、程序框图 三、代码自取结论 前言 本节通过 labview 软件实现先导脉冲检测的功能,从而获取先导脉冲的频率、先导脉冲与线性调频信号的延时的相关信息。 一、脉冲检测…

网站制作(道歉)

王心怡* , 张钊* (淮北师范大学计算机科学与技术学院,安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. 🌞欢迎来到数据结构的世界 🌈博客主页:卿云阁 💌欢迎…

Docker深入

一、简介 Docker是一个用于构建、运行、传送应用程序的平台。 2、为什么使用Docker 在部署服务器过程中,配置各种环境变量、第三方依赖等等,耗费时间太长,使用Docker可以将他们打包成一个集装箱,只要在开发环境中运行成功&…

[SSM]MyBatis查询语句与动态SQL

目录 十、MyBatis查询语句专题 10.1返回Car 10.2返回List 10.3返回Map 10.4返回List 10.5返回Map,map> 10.6resultMap结果映射 使用resultMap进行结果映射 是否开启驼峰命名自动映射 10.7返回总记录条数 十一、动态SQL 11.1 if标签 11.2 where标签 11.3 trim标…

【Python】Selenium操作cookie实现免登录

文章目录 一、查看浏览器cookie二、获取cookie基本操作三、获取cookie并实现免登录四、封装成函数 一、查看浏览器cookie cookie、session、token的区别: cookie存储在浏览器本地客户端,发送的请求携带cookie时可以实现登录操作。session存放在服务器。…

户外运动耳机推荐,盘点最适合运动时佩戴的五款耳机

音乐能有效地激发人体潜能,充分释放能量,达到更好的运动效果,因此对于运动爱好者来说,一个合适的运动耳机至关重要。面对产品种类众多的运动耳机,很多人都会感到迷茫,经常有人问“有什么适合运动的时候佩戴…

【成都】EFDC建模方法、SWAT模型高阶研修

EFDC建模方法及在地表水环境评价、水源地划分、排污口论证应用 为了定量地描述地表水环境质量与污染排放之间的动态关系,EFDC、MIKE、Delft3D、Qual2K等数值模型被广泛应用在环境、水务、海洋等多个领域。Environmental Fluid Dynamics Code(EFDC&#…

STM32的ADC模式及其应用例程介绍

STM32的ADC模式及其应用例程介绍 📍ST官方相关应用笔记介绍资料:https://www.stmcu.com.cn/Designresource/detail/application_note/705947📌相关例程资源包:STSW-STM32028:https://www.st.com/zh/embedded-software/…

微信小程序使用第三方组件wxParse加载富文本html

微信小程序使用第三方组件wxParse加载富文本html 微信小程序微信小程序加载富文本html微信小程序富文本第三方组件wxParsewxParse富文本html wxParse简介 wxParse 是一个微信小程序富文本解析组件,支持支持Html及markdown转wxml。 wxParse gitHub地址&#xff1…

ARM中断实验

#ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//对RCC/GPIO/EXTI章节的初始化 void hal_key1_exti_init();//对GIC的初始…

Css基础:盒子模型

1.盒子模型的构成: 边框 外边距 内边距 实际内容 2.table表格的单元格之间的线太粗需要border-collapse:collapse;合并一下边框宽度 3.内边距 padding 4.外边距 margin 块元素水平居中的做法,margin:0 auto; 行内元素和行内块元素 水平居中做…