`
lvwenwen
  • 浏览: 930733 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

性能调优思考(转)

阅读更多

前言

       这篇文章非常有意思,写于2012年11月1日,不过下面所看到的是2013年11月9日基本上重新写了一篇。之前的内容基本上没有怎么保留。开始也在想要不要新开辟一篇来写,后来想想还是修改比较好一些,后续我也会持续的修改一些文章。对于自己而言是对于一些知识的回顾和整理。因为时间过去了往往对一个东西的认识会有所改变,也对一些已经遗忘的知识重新学习。
       废话不多说老,开始今天的正题。
 

常见的概念

      这里先介绍和性能有关的一些名词,这是一个基础。因为在实战中所遵循的原则也基本在这些理论之上。只是理论很简单,实战很残酷。这里说一个题外话:很多实战派的看不起学院派,两派一向比较仇视对方。

RT

       RT的全称是Response Time,顾名思义就是响应时间的意思,指的是请求发出去到结果返回之前的时间差。

TPS/QPS

       这两个词在这里我们就不做区分,可以简单的认为每秒处理的请求数。那么意味着TPS/QPS提高一倍就意味着处理能力增加一倍。如果知道RT,那么TPS = 线程数量 * 1000/RT。从这个公式可以看出来增加线程数可以增加TPS。但是由于整个资源的逐渐饱和,随着线程数量的增加,RT也随之增加。所以线程数量增加到一定的时候,TPS并不会增加,而且会有所下降,为什么?讲到Context Switch的时候就全明白了。

CPU Time

        一般来讲一个请求不完全是CPU型的,比如说去DB或者缓存取数据,这段时间对于当前的请求来讲并非在耗费CPU资源,这也是多线程的意义所在,比如说一个应用全是计算,如果运行这个应用的机器是单核的,那么开多线程往往会影响使性能下降,为什么?看下面一个概念。

Context Switch

       从字面意思来讲指的是“上下文切换”,在这里我想表达的意思其实是线程之间的切换。也就是说CPU在处理多线程的时候会频繁的让出CPU资源给其他线程,这样上下文切换的成本就上来了。这里也就解释上面我说的问题,为什么在单核存计算的情况下开多线程会使性能下降。因为多出了线程切换的时间。这个可以好好领悟一下。

最佳线程数

       什么是最佳线程数,其实就是一个应用各种资源达到最优协调结果,这是一种理想状态,一般来讲这个值是实际压测出来的。
 

影响性能的节点

CPU

       这个估计没有什么疑问,CPU的执行效率明显的会影响整个请求的时间,所以有时候的请求很慢可能是CPU已经达到100%,这时候就会发现CPU是整个性能的瓶颈。在这里CPU是一个表象,因为使得CPU达到100%的因素很多,比如说处理逻辑太复杂,内存使用不当导致频繁的GC/FGC。当然CPU是一个切入点,一般性能优化的切入点都是观察当前机器整个运行行情况,而不是一股脑的去看代码。

IO

      IO包括很多,网络IO内存IO磁盘IO。这些IO的时间都会影响整个性能,下面详细讲霁这几个IO。

网络IO

       一般情况下如果有远程服务的话那么性能瓶颈就有可能出在网络IO上,另外由于数据通过光纤传输也是需要时间的,比如说从杭州到北京一个来回大概是40ms的时间,对于一些性能要求比较高的应用来说这样的开销有时候同样不可接受,CDN节点一定程度上就是为了解决由于传输导致的性能损耗。这里突然想到一个非常有意思的事就是计算机硬件架构中离CPU越近的节点(比如说L1)性能都非常好。离CPU最远的磁盘性能最差。

内存IO

       内存的使用一般是缓存,这一块的优化就比较细致了,对于性能要求极其严格的场景,内存的换入换出也会导致性能的下降。这个可以看一下整个计算机硬件架构。

磁盘IO

       这种场景比较常见,数据库其实就是最常见的磁盘IO。一般在数据库IO的性能会严重影响整个请求的性能,这也是当前各种Cache大行其道的原因。
 
 

一张图

        下面这张图就是大概画了一般我们可以见到的一些场景,从性能分析的角度来讲也是一个入手点。下面每一个节点都有可能是性能的瓶颈所在,一般程序员都知道一个二八原则,往往20%的程序消耗了80%的资源,所以找到一个点进行着力优化往往会有非常好的效果。
 

总结

       上面只是从整个概念下手和影响性能角度入手来阐述性能,性能领域更多的是靠实战和不断的积累夯实,实战的工具特别多,比如说Linux的Top命令来观查CPU的使用状态,jstack可以打出当前的线程堆栈,virsualVM可以查看整个内存、CPU等一系列的东西。上面所讲的也只不过是冰山一角,比如说随便一个概念都需要去查很多东西然后才知道个所以然。开发工程师能做到的是把自己每一行代码写的漂亮。这些同样需要很多功底。当然从架构的角度他可能需要考虑整个应用的性能。上面的东西整个来讲还是偏理论,可以说给一些不知道的同学扫个盲。
分享到:
评论

相关推荐

    软件性能测试过程详解与案例剖析

    2.1性能测试的方法 2.1.1性能测试 2.1.2负载测试 2.1.3压力测试 2.1.4配置测试 2.1.5并发测试 2.1.6可靠性测试 2.1.7失效恢复测试 2.2性能测试应用领域分析 2.2.1能力验证 2.2.2规划能力 2.2.3性能调优 2.2.4发现...

    毕业设计——大数据Spark平台的在线性能检测与调优.zip

    这是学生将在整个学业中所学知识和技能应用到实际问题上的机会,旨在检验学生是否能够独立思考、解决问题,并展示其专业能力的一项综合性任务。 毕业设计的主要特点包括: 独立性: 毕业设计要求学生具备独立思考...

    2019年最新阿里架构设计资料

    JAVA性能调优.pdf Kubernetes 指南.pdf OceanBase:云时代企业级分布式数据库的技术挑战.pdf Seata 在微服务一致性中的探索.pdf Spring 最新译文精华06.pdf Spring 最新译文精华07.pdf 云原生架构下的混沌工程实践....

    【推荐】ClickHouse技术分享及实践资料合集(21份).zip

    腾讯云clickhouse性能调优实践 云数据库ClickHouse分析业务最佳实践 云数据库ClickHouse核心技术解析 ClickHouse Projections, ETL and more ClickHouse技术在手淘流量分析应用实践 Clickhouse玩转每天千亿数据 ...

    DTCC2021第12届中国数据库技术大会(88份).zip

    OushuDB性能调优实战 TDSQL全局一致性读技术详解 万亿级湖仓一体架构下的统一数据服务平台应用实践 滴普基于ClickHouse的实时分析引擎应用实践 滴普湖仓一体架构探索与实践 腾讯云原生自研数据库内核深度优化最佳...

    数据库服务器的调优步骤

    当我们遇到数据库调优的问题,该如何思考呢?下面分享一张思考的流程图: 将整个流程划分成观察(Show status)和行动(Action)两个部分。其中字母S的部分代表观察(会使用相应的分析工具),字母A代表的部分是行动...

    java-tech-stack:Java技术栈,涉及Java技术体系,Java编程练习题,Java面试题,IT宅文章收录,以及业界优秀博文收录

    Java Tech Stack,Java技术栈. 持续更新中... arthinking根据心中的Java技术栈形象绘制了这个...性能调优学习资源 Tomcat 面试题 互联网大厂面试题 技术博客:IT宅 关注公众号及时获取最新内容: 关于arthinking GitHub

    我们一起聊聊性能测试是怎么一回事?

    后面三场会重点介绍如何进行性能测试,从需求到最后的调优。第一场主要希望没有接触过或接触过但认识不全的同学带去一些思考。比如红亮灯那个涂鸦就是做了些与目标不一致的事情。这是大家测试中常常犯的错,所以我...

    MySQL性能分析神器,你还不知道它?那你就out了

    当我们遇到数据库调优的问题,该如何思考呢?下面分享一张思考的流程图: 将整个流程划分成观察(Show status)和行动(Action)两个部分。其中字母S的部分代表观察(会使用相应的分析工具),字母A代表的部分是行动...

    工程概论3_作业11

    3、精通主要应用服务器(Weblogic/WebSphere/Tomcat等)的配置、使用和优化,熟悉Linux操作系统 4、精通web应用的性能瓶颈和调优方式

    road-of-arch:Java技术系统(核心知识点)

    前言 主要包含“技术体系”总导图,detail-xmind详细...分库分表,高并发,高性能,高扩展,稳定性,数据分析等经典方案实战大杂烩。 五MySql原理 在mysql中思考 含MySql原理,索引,调优等。 六缓存中间件 无神的思考

    02-微盟技术沙龙-ES在商品中台的落地 12.21 2023 online

    三、基于业务场景的 ES 性能优化:ES 在业务的调优以及如何做优化,解决潜在问题风险,支持高频次的吞吐和写入查询。 最后呢,通过这些年与 ES 的恩爱情仇,提供一些ES,顶层的一些思考与方法论,一起交流,可以更...

    NVIDIA GTC CHINA 2020大会资料汇总(144份).zip

    HPC 应用性能分析和调优; RDMA 在分布式存储中的应用; 深度学习平台及应用: 用 NVIDIA Jarvis 来构建你的语音助理; 安全 AI 平台 GPU 实践和思考; 飞桨推理引擎性能优化; 高阶信息如何加速神经网络训练?; ...

    java版p2p网贷系统源码8.0-RESUME:恢复

    擅长性能调优,处理多线程高并发场景 关注系统安全,熟悉安全相关知识 熟悉消息队列,SQL/NOSQL技术,熟悉数据库锁/事务/索引/优化 熟悉分布式集群系统的设计,清楚CAP,BASE理论, DevOps理念 擅长建模,擅长应用...

    第一讲-大型互联网项目架构设计实践及架构优化思路.pdf

    1、如何构建一个高可用,高并发的项目架构(架构方向思考: 项目架构问题) 2、压测方案(发现系统问题,进行修复,调试)-- 分析当前系统性能瓶颈,解读一些 压测报告 3、服务器(tomcat 服务器,undertow 服务调优...

    Hadoop实战中文版

    6.3 性能调优 6.3.1 通过combiner来减少网络流量 6.3.2 减少输入数据量 6.3.3 使用压缩 6.3.4 重用JVM 6.3.5 根据猜测执行来运行 6.3.6 代码重构与算法重写 6.4 小结 第7章 细则手册 7.1 向任务传递作业...

    Hadoop实战(陆嘉恒)译

    编程实践6.1 开发MapReduce 程序6.1.1 本地模式6.1.2 伪分布模式6.2 生产集群上的监视和调试6.2.1 计数器6.2.2 跳过坏记录6.2.3 用IsolationRunner重新运行出错的任务6.3 性能调优6.3.1 通过combiner来减少网络流量...

    Hadoop实战中文版.PDF

    1186.2 生产集群上的监视和调试 1236.2.1 计数器 1236.2.2 跳过坏记录 1256.2.3 用IsolationRunner重新运行出错的任务 1286.3 性能调优 1296.3.1 通过combiner来减少网络流量 1296.3.2 减少输入数据量...

    Hadoop实战

    1286.3 性能调优 1296.3.1 通过combiner来减少网络流量 1296.3.2 减少输入数据量 1296.3.3 使用压缩 1296.3.4 重用JVM 1326.3.5 根据猜测执行来运行 1326.3.6 代码重构与算法重写 1336.4 小结 134第7章 细则手册 ...

    手机淘宝移动端接入网关基础架构演进之路

    手机淘宝从过去的HTTPAPI网关,到2014年升级支持SPDY,2015年双十一自研高性能、全双工、安全的ACCS(阿里云通道服务)扛住双十一战场主要流量,无论是基础架构的演进、网络调优、协议的优化、异地多活、网络调度上都...

Global site tag (gtag.js) - Google Analytics