高并发&性能优化(一)------总体介绍
【开篇词】
本文主要通过一些经典的高并发场景,以及一些基本的运维工具来讲述一些关于高并发以及性能优化相关的内容,主要包括性能瓶颈的定位,性能调优的思路和技巧等。
【性能的衡量指标】
?什么是性能
性能就是,在有限的时间内,使用有限的资源,完成任务。
在存储资源成本越来越低的今天,时间,就成为了性能指标的度量单位。
衡量指标主要包括以下几个方面:

------吞吐量和响应速度
以红绿灯为例,我们开车到红绿灯前,从排队到行驶通过,这个过程花费的时间,叫响应时间,我们通过的速度,就叫响应速度。
然而,单位时间内通过的车辆总数,就叫吞吐量。
有几个与吞吐量相关的指标:
|
QPS |
每秒查询的数量 |
|
TPS |
每秒事务的数量 |
|
HPS |
每秒的HTTP请求的数量 |
在性能优化的时候,我们首先要确认优化的目标,是吞吐量还是响应速度。
二者有什么不同呢?
响应速度是对串行任务的优化,通过优化执行步骤解决问题;
吞吐量是对并行任务的优化,通过合理利用计算资源达到目标。
------响应时间
响应时间一般代表一个任务的总处理时间,它主要有两个指标。
最常用的,即平均响应时间(AVG),主要体现服务的平均处理时长。
一般情况下,AVG可以很好的体现响应的效率,但是在高并发应用下,由于请求量很大,所以导致某些响应时间很长的请求被很快平均掉了,没有被体现出来;
所以,我们又引入了百分位数(Percentile),它能够反映出应用接口的整体响应情况:
百分位数,是将响应时间从小到大排序,然后返回某一个百分位的响应时间数值。
比如比较常用的TP95 = 100ms,就代表超过95%的请求可以在100ms内返回。
对高百分位的值要求越高,对系统响应能力的稳定性要求越高。
------并发量
并发量是指系统同时能处理的请求数量,这个指标反映了系统的负载能力。
------秒开率
秒开通常指的是在1s以下将应用加载完成,是用户体验很重要的指标。
------正确性
这个不用多说,主要指的是接口返回数据的正确性。
【理论方法】
------木桶理论
木桶可以装多少水,取决于最短的那块木板。
同理,系统的整体性能,就取决于系统中最慢的组件。
------基准测试
基准测试(Benchmark)用来测试程序的最佳性能。
在java中,基准测试主要通过JMH工具进行。
【性能优化的主要技术手段】

------复用
复用优化中,主要包含以下几个方面:
|
缓冲(Buffer) |
常见于对数据的暂存,然后批量传输或者写入。 |
|
缓存(Cache) |
对于已经读取的操作,将其暂存于速度较快的区域,重复读取的时候速度就会得到加强。 |
|
池化 |
参照线程池,避免了资源的大量创建和销毁,以及上下文切换。 |
------计算优化
|
并行执行 |
|
|
异步 |
将应用的同步方式修改为异步方式 |
|
惰性加载 |
将有些非关键的图片或者其他显示信息,在应用加载(无需等)结束之后慢慢加载 |
------结果集优化
在传输之前,将传输的内容进行压缩或者简化。
比如nginx的gzip,比如xml替换成json。
------资源冲突优化
主要是对冲突锁的优化。
------算法优化/高效实现
算法优化指的是针对代码实现算法的优化,高效实现指的是尽量摒弃原有的旧的效率低下的插件以及框架,使用比较流行的技术。
------JVM 优化
主要针对java虚拟机相关的一些优化。
一般参数比较适合的时候,性能会好很多,参数设置不当会造成OOM等后果。
目前,垃圾回收器已经广泛使用G1,通过很少的参数配置,内存即可高效回收;CMS垃圾回收器在Java14中已经被移除,由于其GC时间不可控,所以在使用时应当小心注意。
高并发&性能优化(一)------总体介绍的更多相关文章
- 高并发&性能优化(二)------系统监控工具使用
上一篇主要从总体介绍了高并发&性能优化的相关思路和方法,本篇主要介绍系统监控工具. [CPU查看工具] ------top命令(性能) 进入top命令后,按1即可看到每核CPU的运行指标与详细 ...
- 用Netty开发中间件:高并发性能优化
用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...
- 用Netty开发中间件:高并发性能优化(转)
用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...
- GNU Linux高并发性能优化方案
/*********************************************************** * Author : Samson * Date : 07/14/2015 * ...
- SpringCloud高并发性能优化
1. SpringCloud高并发性能优化 1.1. 前言 当系统的用户量上来,每秒QPS上千后,可能就会导致系统的各种卡顿,超时等情况,这时优化操作不可避免 1.2. 优化步骤 第一步:优化大SQL ...
- Java 架构师+高并发+性能优化+Spring boot大型分布式项目实战
视频课程内容包含: 高级 Java 架构师包含:Spring boot.Spring cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.Zer ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- 网站性能优化— WebP 全方位介绍
谈到优化网站性能时,主要目标之一就是减少要发送到浏览器的数据量(即 payload).而当前,图片通常是页面构成中最耗费流量的部分,因此降低图片的大小是一个最为有效的优化网页前端性能的办法. 有很多工 ...
- 百万并发中间件系统的内核设计看Java并发性能优化
“ 这篇文章,给大家聊聊一个百万级并发的中间件系统的内核代码里的锁性能优化. 很多同学都对Java并发编程很感兴趣,学习了很多相关的技术和知识.比如volatile.Atomic.synchroniz ...
随机推荐
- 第一章 Java快速入门
1.1.安装开发环境 第一步:打开下载地址,下载对应平台的 JDK 安装包 第二步:打开下载软件,全部默认下一步傻瓜式安装 1.2.配置环境变量 第一步:配置JAVA_HOME 第二步:配置CLASS ...
- python入门神书!|python编程从入门到实践|内附网盘链接带提取码|
点击此处进入网盘下载地址 提取码:o39n 全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 —— 游戏.数据可视化和 Web 应用程序,同时掌握让 ...
- PHP substr_compare() 函数
实例 比较两个字符串: <?php高佣联盟 www.cgewang.comecho substr_compare("Hello world","Hello worl ...
- 7.28 NOI模拟赛 H2O 笛卡尔树 并查集 贪心 长链剖分
LINK:H2O 这场比赛打的稀烂 爆蛋. 只会暴力.感觉暴力细节比较多不想写. 其实这道题的难点就在于 采取什么样的策略放海绵猫. 知道了这一点才能确定每次放完海绵猫后的答案. 暴力枚举是不行的.而 ...
- 7.11 NOI模拟赛 qiqi20021026的T1 四个指针莫队 trie树
LINK:qiqi20021026的T1 考场上只拿到了50分的\(nq\)暴力. 考虑一个区间和一个区间配对怎么做 二分图最大带权匹配复杂度太高. 先考虑LCS的问题 常见解决方法是后缀数组/tri ...
- luogu4443 coci 2017 Dajave
题目 给出一个长度为2^M的排列,元素分别是0, 1, 2, ... , 2^M -1. 选择其中某个非空连续子序列,然后允许交换这个排列中某两个不同的数,然后使得这个连续子序列的所有数的按位异或(b ...
- 代码规范、API设计等规范
一份整理好了的规范文档,node后端开发用到 "规范是个好东西..." - 鲁迅 以下规范仅作为参考 1.代码规范 命名 尽量保证命名更加语义化 文件命名采用下划线命名法 // g ...
- 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程
前言 最近开始了SpringBoot相关知识的学习,作为为目前比较流行.用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点.作为Spring框架项目,肯定少不了与数据库持 ...
- Python编写的桌面图形界面程序实现更新检测和下载安装
在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...
- java web应用启动报错:Caused by: java.lang.ClassNotFoundException: ServletContext
ServletContext是个接口,不同的WEB容器(tomcat, jboss等)都有各自的实现. 一般是缺少servlet-api.jar包 在Java Build Path的Libraries ...