jvm性能调优(五)-----深入了解性能优化 影响一个系统性能的方方面面 常用的性能评价/测试指标 常用的性能优化手段 存储性能优化
常用的性能评价/测试指标
响应时间
提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。
如:数据库查询花费的时间,将字符回显到终端上花费的时间,访问 Web 页面花费的时间;
并发数
指同一时刻,对服务器有实际交互的请求数。和网站在线用户数的关联。
吞吐量
对单位时间内完成的工作量(请求)的量度。
如:每分钟的数据库事务,每秒传送的文件千字节数,每分钟的 Web 服务器命中数
关系
通常,平均响应时间越短,系统吞吐量越大;平均响应时间越长,系统吞吐量越小。但是,系统吞吐量越大, 未必平均响应时间越短。
常用的性能优化手段
前端优化
A、浏览器/App
1、减少请求数;
a、合并css、合并js、合并图片等
b、http头中的keep-alive(现在浏览器都是默认开启,基本不需要操心)
2、使用客户端缓冲;
静态资源文件缓存在浏览器,通过Cache-Control和Expires
3、启用压缩
服务器端对资源进行压缩,客户端进行解压缩(但是会给服务器以及浏览器增加压力)
4、资源文件加载顺序
css放在页面最上面,js放在最下面
5、减少Cookie传输
静态页面不传输cookie信息
B、CDN加速
内容分发网络(图片、css、js等静态资源)
C、反向代理缓存
比如使用nginx,将静态资源放在nginx上面。
D、WEB组件分离
应用服务性能优化
A、缓存
优先考虑使用缓存优化性能,缓存离用户越近越好。适用于读写比高的数据,也就是读多写少的场景,如果每秒数据都被更改,缓存就失去了意义,不仅数据时效性差,缓存的维护也浪费了资源。
1、缓存的基本原理、本质以及问题
频繁修改的数据,尽量不要缓存,读写比2:1以上;
缓存一定是热点数据;
应用就要容忍一定时间的数据不一致;
缓存可用性问题;
缓存预热;
缓存击穿:1、布隆过滤器;2、把不存在的数据也缓存起来({"key":null})
2、分布式缓存与一致性哈希
如果node4这个服务器挂了,那么数据会放到node3上。
B、集群
C、异步
1、同步、异步、阻塞、非阻塞
同步和异步关注的是结果消息的通信机制;
阻塞和非阻塞关注的是等待结果返回给调用方的状态。
2、解释
同步、异步:
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。
在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。
D、程序
1、代码级别
a、选择合适的数据结构
b、选择更优的算法
c、编写更少的代码
2、并发编程
a、充分利用CPU多核,尽量使用线程池,合理设置线程数量,尽量使用JDK 提供的各种并发框架和工具
b、实现线程安全的类,避免线程安全问题
c、同步下减少锁的竞争
- 缩小锁的范围,减少锁的粒度,锁分段,
- 替换独占锁,读写锁,CAS代替锁,ThreadLocal等等
3、资源的复用
减少开销很大的系统资源的创建和销毁
a、单例模式
b、池化技术
4、JVM
a、与JIT编译器相关的优化
- 热点编译的概念
- 选择编译器类型 -server,-client,-XX:+TieredCompilation
- 代码缓存相关 –XX:ReservedCodeCacheSize=N
- 编译阈值
- 编译线程
- 方法内联
- 逃逸分析
b、GC调优
- 目的
- 调优的原则和步骤
- 学会阅读GC日志
- 其他与GC相关的参数
- 推荐策略
c、调优实战
- 不同的内存大小
- 不同的GC回收器
存储性能优化
尽量使用SSD
定时清理数据或者按数据的性质分开存放
结果集处理