(1)制约程序性能的根源
常用的性能评估指标
并发:同一时间多少请求访问
TPS:transaction per second,一秒钟可以处理多少个transaction,写操作
QPS:query per second,一秒钟可以处理多少个查询,读操作
耗时:端到端耗时,服务端耗时,应用程序耗时
95线:95%的请求落在什么范围内
99线:99%的请求落在什么范围内
<1>网络<2>应用本身<3>数据库<4>缓存<5>消息<6>操作系统<7>内存<8>IO<9>CPU
(2)将应用程序优化到极致
JVM内存结构
gc算法:
<1>标记清除算法,优点:简单,缺点:随便化
<2>复制算法,
<3>分代算法,
内存大小的取舍
<1>扩大内存可以更少的触发gc
<2>内存太大触发gc时候的停顿时间会长
吞吐量=花费在非gc停顿上的工作时间/总时间 至少需要优化到95%
-xms启动JVM时堆内存的大小
-xmx堆内存最大限制
两者需要设置的一样防止扩缩容
-XX:NewSize年轻代大小
-XX:MaxNewSize最大年轻代大小
两者需要设置的一样防止扩缩容
GC优化
将进入老年代的对象减少到最低
yang gc:40ms内
major gc: stop the world时间总和和100ms内
full gc:尽可能少,且时间在1s内
CMS Full GC条件
CMS调优
G1参数调优
调优Best pratise
日志优化
同步日志/异步日志
日志归档时间
日志大小拆分
池化策略
idle数量
(2)提高数据库的读写性能
单机数据库
<1>查询优化
主键查询 千万条记录1-10ms
唯一索引 千万条记录10-100ms
非唯一索引 千万条记录100-1000ms
无索引 百万条记录 1000ms
<2>批量写
for each (insert into tables values ())
execute once insert into tables values ()
<3>索引优化
<4>innodb相关优化
读写分离
一主多从
读库延迟问题处理
主从切换处理
分库分表
垂直拆分
水平拆分
多主多从
(3)应对缓存问题
穿透:数据不存在,解决:尝试设置无效标志位代表数据不存在
击穿:
雪崩
缓存脏数据问题
多级缓存
(4)如何优化网络瓶颈
网络瓶颈的根源:
公网:带宽,出口调用量
内网:带宽,出口调用量
解决:
分散数据
压缩