目前已经更新完《Java并发编程》和《Docker教程》,欢迎关注【后端精进之路】,轻松阅读全部文章。
Java并发编程:
- Java并发编程系列-(1) 并发编程基础
- Java并发编程系列-(2) 线程的并发工具类
- Java并发编程系列-(3) 原子操作与CAS
- Java并发编程系列-(4) 显式锁与AQS
- Java并发编程系列-(5) Java并发容器
- Java并发编程系列-(6) Java线程池
- Java并发编程系列-(7) Java线程安全
- Java并发编程系列-(8) JMM和底层实现原理
- Java并发编程系列-(9) JDK 8/9/10中的并发
Docker教程:
- Docker系列-(1) 原理与基本操作
- Docker系列-(2) 镜像制作与发布
- Docker系列-(3) Docker-compose使用与负载均衡
JVM性能优化:
- JVM性能优化系列-(1) Java内存区域
- JVM性能优化系列-(2) 垃圾收集器与内存分配策略
- JVM性能优化系列-(3) 虚拟机执行子系统
- JVM性能优化系列-(4) 编写高效Java程序
- JVM性能优化系列-(5) 早期编译优化
- JVM性能优化系列-(6) 晚期编译优化
- JVM性能优化系列-(7) 深入了解性能优化
7. 深入了解性能优化
7.1 影响系统性能的方方面面
影响系统性能的因素有很多,以下列举了常见的一些系统性能优化的方向:
7.2 常用的性能评价和测试指标
响应时间
提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。
如:数据库查询花费的时间,将字符回显到终端上花费的时间,访问 Web 页面花费的时间;
并发量
指同一时刻,对服务器有实际交互的请求数。和网站在线用户数的关联。
吞吐量
对单位时间内完成的工作量(请求)的量度。
如:每分钟的数据库事务,每秒传送的文件千字节数,每分钟的 Web 服务器命中数。
通常,平均响应时间越短,系统吞吐量越大;平均响应时间越长,系统吞吐量越小。但是,系统吞吐量越大,未必平均响应时间越短。
7.3 常用的性能优化手段
对于系统的性能调优,总体上从如下三个方面入手:
- 前端优化
- 应用服务性能优化
- 存储性能优化
但是无论怎么优化,总原则就是:
- 避免过早优化,优化的前提是基本功能完成且测试通过;
- 进行系统性能测试,需要通过性能测试来确定性能,不能主观臆测;
- 寻找系统瓶颈,分而治之,逐步优化。
前端优化
- 浏览器/App
- 减少请求数;
- 使用客户端缓冲;
- 启用压缩
- 资源文件加载顺序
- 减少Cookie传输
-
CDN加速
-
反向代理缓存
-
WEB组件分离
应用服务性能优化
1. 缓存
优先考虑使用缓存优化性能。
2. 集群
3. 异步
- 异步与同步:关注的是结果消息的通信机制。
- 阻塞和非阻塞:关注的是等待结果返回给调用方的状态。
组合起来有4种状态。
4. 程序
- 代码级别:选择合适的数据结构、选择更优的算法、编写更少的代码。
- 并发编程:充分利用CPU多核,尽量使用线程池,合理设置线程数量,尽量使用JDK 提供的各种并发框架和工具;实现线程安全的类,避免线程安全问题;同步下减少锁的竞争:缩小锁的范围,减少锁的粒度,锁分段,替换独占锁,读写锁,CAS代替锁,ThreadLocal等。
- 资源复用:减少开销很大的系统资源的创建和销毁。单例模式和池化技术。
- JVM调优
GC调优的方向:GC的时间够小,GC的次数够少
大多数的Java应用不需要GC调优,大部分需要GC调优的,不是参数问题,是代码问题
GC调优是最后手段。
GC调优的优先级:
第一位:选择合适的GC回收期
第二位:选择合适的堆大小
第三位:选择年轻代在堆中的比重
步骤:
1.监控GC的状态
2. 分析结果,判断是否要优化
minGC 时间《 50ms,10s一次
FullGC执行1s一下,频率10分钟以上
打印GC日志:
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
-XLogger:logpath
-XX:PrintHeapAtGC
存储性能优化
- 尽量使用SSD
- 定时清理数据或者按数据的性质分开存放
- 结果集处理
本文由『后端精进之路』原创,首发于博客 http://teckee.github.io/ , 转载请注明出处
搜索『后端精进之路』关注公众号,立刻获取最新文章和价值2000元的BATJ精品面试课程。