【开篇词】

本文主要通过一些经典的高并发场景,以及一些基本的运维工具来讲述一些关于高并发以及性能优化相关的内容,主要包括性能瓶颈的定位,性能调优的思路和技巧等。

【性能的衡量指标】

?什么是性能

性能就是,在有限的时间内,使用有限的资源,完成任务。

在存储资源成本越来越低的今天,时间,就成为了性能指标的度量单位。

衡量指标主要包括以下几个方面:

------吞吐量和响应速度

以红绿灯为例,我们开车到红绿灯前,从排队到行驶通过,这个过程花费的时间,叫响应时间,我们通过的速度,就叫响应速度。

然而,单位时间内通过的车辆总数,就叫吞吐量。

有几个与吞吐量相关的指标:

QPS

每秒查询的数量

TPS

每秒事务的数量

HPS

每秒的HTTP请求的数量

在性能优化的时候,我们首先要确认优化的目标,是吞吐量还是响应速度。

二者有什么不同呢?

响应速度是对串行任务的优化,通过优化执行步骤解决问题;

吞吐量是对并行任务的优化,通过合理利用计算资源达到目标。

------响应时间

响应时间一般代表一个任务的总处理时间,它主要有两个指标。

最常用的,即平均响应时间(AVG),主要体现服务的平均处理时长。

一般情况下,AVG可以很好的体现响应的效率,但是在高并发应用下,由于请求量很大,所以导致某些响应时间很长的请求被很快平均掉了,没有被体现出来;

所以,我们又引入了百分位数(Percentile),它能够反映出应用接口的整体响应情况:

百分位数,是将响应时间从小到大排序,然后返回某一个百分位的响应时间数值。

比如比较常用的TP95 = 100ms,就代表超过95%的请求可以在100ms内返回。

对高百分位的值要求越高,对系统响应能力的稳定性要求越高。

------并发量

并发量是指系统同时能处理的请求数量,这个指标反映了系统的负载能力。

------秒开率

秒开通常指的是在1s以下将应用加载完成,是用户体验很重要的指标。

------正确性

这个不用多说,主要指的是接口返回数据的正确性。

【理论方法】

------木桶理论

木桶可以装多少水,取决于最短的那块木板。

同理,系统的整体性能,就取决于系统中最慢的组件。

------基准测试

基准测试(Benchmark)用来测试程序的最佳性能。

在java中,基准测试主要通过JMH工具进行。

【性能优化的主要技术手段】

------复用

复用优化中,主要包含以下几个方面:

缓冲(Buffer)

常见于对数据的暂存,然后批量传输或者写入。
用来缓解不同设备之间频繁地、缓慢地随机写。
主要针对写操作。

缓存(Cache)

对于已经读取的操作,将其暂存于速度较快的区域,重复读取的时候速度就会得到加强。
主要针对读操作。

池化

参照线程池,避免了资源的大量创建和销毁,以及上下文切换。

------计算优化

并行执行

  • 多机(负载均衡)
  • 多进程(如nginx只有一个master进程,却有多个Worker进程)
  • 多线程

异步

将应用的同步方式修改为异步方式

惰性加载

将有些非关键的图片或者其他显示信息,在应用加载(无需等)结束之后慢慢加载

------结果集优化

在传输之前,将传输的内容进行压缩或者简化。

比如nginx的gzip,比如xml替换成json。

------资源冲突优化

主要是对冲突锁的优化。

------算法优化/高效实现

算法优化指的是针对代码实现算法的优化,高效实现指的是尽量摒弃原有的旧的效率低下的插件以及框架,使用比较流行的技术。

------JVM 优化

主要针对java虚拟机相关的一些优化。

一般参数比较适合的时候,性能会好很多,参数设置不当会造成OOM等后果。

目前,垃圾回收器已经广泛使用G1,通过很少的参数配置,内存即可高效回收;CMS垃圾回收器在Java14中已经被移除,由于其GC时间不可控,所以在使用时应当小心注意。

高并发&性能优化(一)------总体介绍的更多相关文章

  1. 高并发&性能优化(二)------系统监控工具使用

    上一篇主要从总体介绍了高并发&性能优化的相关思路和方法,本篇主要介绍系统监控工具. [CPU查看工具] ------top命令(性能) 进入top命令后,按1即可看到每核CPU的运行指标与详细 ...

  2. 用Netty开发中间件:高并发性能优化

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  3. 用Netty开发中间件:高并发性能优化(转)

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  4. GNU Linux高并发性能优化方案

    /*********************************************************** * Author : Samson * Date : 07/14/2015 * ...

  5. SpringCloud高并发性能优化

    1. SpringCloud高并发性能优化 1.1. 前言 当系统的用户量上来,每秒QPS上千后,可能就会导致系统的各种卡顿,超时等情况,这时优化操作不可避免 1.2. 优化步骤 第一步:优化大SQL ...

  6. Java 架构师+高并发+性能优化+Spring boot大型分布式项目实战

    视频课程内容包含: 高级 Java 架构师包含:Spring boot.Spring cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.Zer ...

  7. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  8. 网站性能优化— WebP 全方位介绍

    谈到优化网站性能时,主要目标之一就是减少要发送到浏览器的数据量(即 payload).而当前,图片通常是页面构成中最耗费流量的部分,因此降低图片的大小是一个最为有效的优化网页前端性能的办法. 有很多工 ...

  9. 百万并发中间件系统的内核设计看Java并发性能优化

    “ 这篇文章,给大家聊聊一个百万级并发的中间件系统的内核代码里的锁性能优化. 很多同学都对Java并发编程很感兴趣,学习了很多相关的技术和知识.比如volatile.Atomic.synchroniz ...

随机推荐

  1. Day02_IP地址详解&进制转换&DOS基本命令与批处理

    学于千峰教育开源课程 感谢 千峰教育官网 b站在线视频 IP地址详解 一.简单局域网的构成 局域网:一般称为内网 简单局域网的构成:交换机.网线.PC(其他IT终端) 交换机:用来组建内网的局域网的设 ...

  2. zookeeper 源码编译

    环境:mac 1.github上下载 源码 项目地址:https://github.com/apache/zookeeper 2.安装 ant mac:brew update ->  brew ...

  3. 给定两个列表,转换为 DataFrame 类型

    import pandas as pd def get_data(): q1 = [] q2 = [] p1 = input("list 1:") p2 = input(" ...

  4. JS中Math.random()的使用和扩展

    Math.random()方法返回大于等于 0 小于 1 的一个随机数.对于某些站点来说,这个方法非常实用,因为可以利用它来随机显示一些名人名言和新闻事件. 在连续整数中取得一个随机数 值 = Mat ...

  5. luogu P1784 数独 dfs 舞蹈链 DXL

    LINK:数独 这道题好难 比DXL模板题要难上不少. 首先 还是考虑将行当做决策 那么 一共有\(9*9*9=729\) 个决策. 考虑列用来填充 需要有的条件为 某个位置能能放一次\(9*9\) ...

  6. linux的软件管理的rpm包和yum配置加tar解压包和安装编译./configuer

    软件管理 rpm包  和yum 1.软件形式 Linux系统的第三方软件,无论是应用软件还是工具软件,大多以以下两种形式之一发行: 源代码形式       预编译形式 获取的源代码形式的软件,需要对其 ...

  7. Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)

    T00ls 每日签到是可以获取 TuBi 的,由于常常忘记签到,导致损失了很多 TuBi .于是在 T00ls 论坛搜索了一下,发现有不少大佬都写了自己的签到脚本,签到功能实现.定时任务执行以及签到提 ...

  8. 我用python远程探查女友每天的网页访问记录,她不愧是成年人!

    利用Python制作远程查看别人电脑的操作记录,与其它教程类似,都是通过邮件返回. 利用程序得到目标电脑浏览器当中的访问记录,生产一个文本并发送到你自己的邮箱,当然这个整个过程除了你把python程序 ...

  9. JS 导航条切换案例

    HTML代码: <div class="tab"> <div class="tab_list"> <ul> <li c ...

  10. C#开发笔记之01-为什么开源框架会大量的使用protected virtual?

    C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/957 访问. 我们在很多开源框架中会经常看到prote ...